forked from x/icebergs
add cache.limit
This commit is contained in:
parent
27938bc30d
commit
1b8a538c7c
@ -120,6 +120,9 @@ func _hash_inputs(m *ice.Message, prefix, key string, field, value string) {
|
|||||||
}
|
}
|
||||||
func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
||||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
||||||
|
if val[kit.MDB_META] != nil {
|
||||||
|
val = val[kit.MDB_META].(map[string]interface{})
|
||||||
|
}
|
||||||
for i := 0; i < len(arg)-1; i += 2 {
|
for i := 0; i < len(arg)-1; i += 2 {
|
||||||
if val[arg[i]] != arg[i+1] {
|
if val[arg[i]] != arg[i+1] {
|
||||||
return
|
return
|
||||||
@ -347,6 +350,10 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
|||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
SELECT: {Name: "select conf key type field value", Help: "数据查询", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
SELECT: {Name: "select conf key type field value", Help: "数据查询", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Conf(arg[0], arg[1])
|
||||||
|
|
||||||
|
m.Option("cache.begin")
|
||||||
|
m.Option("cache.begin")
|
||||||
switch arg[2] {
|
switch arg[2] {
|
||||||
case HASH:
|
case HASH:
|
||||||
_hash_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select(kit.MDB_FOREACH, arg, 4))
|
_hash_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select(kit.MDB_FOREACH, arg, 4))
|
||||||
|
@ -37,7 +37,6 @@ func _dream_show(m *ice.Message, name string) {
|
|||||||
p := path.Join(m.Conf(DREAM, "meta.path"), name)
|
p := path.Join(m.Conf(DREAM, "meta.path"), name)
|
||||||
os.MkdirAll(p, ice.MOD_DIR)
|
os.MkdirAll(p, ice.MOD_DIR)
|
||||||
|
|
||||||
m.Debug("what %v", m.Option("repos"))
|
|
||||||
if m.Option("repos") != "" {
|
if m.Option("repos") != "" {
|
||||||
m.Cmd("web.code.git.repos", "create", "remote", m.Option("repos"), "path", p)
|
m.Cmd("web.code.git.repos", "create", "remote", m.Option("repos"), "path", p)
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,7 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 用户请求
|
// 用户请求
|
||||||
|
msg.Option("cache.limit", "10")
|
||||||
msg.Option(ice.MSG_METHOD, r.Method)
|
msg.Option(ice.MSG_METHOD, r.Method)
|
||||||
msg.Option(ice.MSG_USERWEB, kit.Select(msg.Conf(SHARE, "meta.domain"), r.Header.Get("Referer")))
|
msg.Option(ice.MSG_USERWEB, kit.Select(msg.Conf(SHARE, "meta.domain"), r.Header.Get("Referer")))
|
||||||
msg.Option(ice.MSG_USERIP, r.Header.Get(ice.MSG_USERIP))
|
msg.Option(ice.MSG_USERIP, r.Header.Get(ice.MSG_USERIP))
|
||||||
@ -135,6 +136,9 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if msg.Option("cache.begin") == "" {
|
||||||
|
msg.Option("cache.begin", -kit.Int(msg.Option("cache.limit")))
|
||||||
|
}
|
||||||
// 执行命令
|
// 执行命令
|
||||||
if cmds, ok := _serve_login(msg, kit.Simple(msg.Optionv(ice.MSG_CMDS)), w, r); ok {
|
if cmds, ok := _serve_login(msg, kit.Simple(msg.Optionv(ice.MSG_CMDS)), w, r); ok {
|
||||||
msg.Option("_option", msg.Optionv(ice.MSG_OPTION))
|
msg.Option("_option", msg.Optionv(ice.MSG_OPTION))
|
||||||
|
12
data.go
12
data.go
@ -33,6 +33,18 @@ func (m *Message) Grows(key string, chain interface{}, match string, value strin
|
|||||||
if cache == nil {
|
if cache == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
begin := kit.Int(m.Option("cache.begin"))
|
||||||
|
limit := kit.Int(m.Option("cache.limit"))
|
||||||
|
count := kit.Int(m.Option("cache.count", kit.Int(kit.Value(cache, "meta.count"))))
|
||||||
|
if begin >= 0 || m.Option("cache.limit") == "" {
|
||||||
|
if begin > 0 {
|
||||||
|
begin -= 1
|
||||||
|
}
|
||||||
|
m.Option("cache.offend", count-begin-limit)
|
||||||
|
} else {
|
||||||
|
m.Option("cache.offend", -begin-limit)
|
||||||
|
}
|
||||||
return miss.Grows(kit.Keys(key, chain), cache,
|
return miss.Grows(kit.Keys(key, chain), cache,
|
||||||
kit.Int(kit.Select("0", m.Option("cache.offend"))),
|
kit.Int(kit.Select("0", m.Option("cache.offend"))),
|
||||||
kit.Int(kit.Select("10", m.Option("cache.limit"))),
|
kit.Int(kit.Select("10", m.Option("cache.limit"))),
|
||||||
|
@ -26,7 +26,8 @@ cd ./_install
|
|||||||
|
|
||||||
chapter "应用"
|
chapter "应用"
|
||||||
web.code.zsh.sess contexts
|
web.code.zsh.sess contexts
|
||||||
field "会话" web.code.zsh.sess
|
|
||||||
|
field "命令行" web.code.zsh.sess
|
||||||
field "收藏夹" web.code.zsh.favor
|
field "收藏夹" web.code.zsh.favor
|
||||||
field "同步流" web.code.zsh.sync
|
field "同步流" web.code.zsh.sync
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package zsh
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
|
"github.com/shylinux/icebergs/base/aaa"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
@ -11,6 +12,13 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
SID = "sid"
|
||||||
|
ARG = "arg"
|
||||||
|
SUB = "sub"
|
||||||
|
PWD = "pwd"
|
||||||
|
PID = "pid"
|
||||||
|
)
|
||||||
const SESS = "sess"
|
const SESS = "sess"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -22,7 +30,7 @@ func init() {
|
|||||||
)},
|
)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
SESS: {Name: "sess hash auto 导出 导入", Help: "会话流", Action: map[string]*ice.Action{
|
SESS: {Name: "sess hash auto 清理", Help: "会话流", Action: map[string]*ice.Action{
|
||||||
"contexts": {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
|
"contexts": {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
|
||||||
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
||||||
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1)))
|
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1)))
|
||||||
@ -31,11 +39,8 @@ func init() {
|
|||||||
m.Cmdy("web.wiki.spark", "shell", string(buf))
|
m.Cmdy("web.wiki.spark", "shell", string(buf))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.EXPORT, m.Prefix(SESS), "", mdb.HASH)
|
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "logout")
|
||||||
}},
|
|
||||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.Cmdy(mdb.IMPORT, m.Prefix(SESS), "", mdb.HASH)
|
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||||
@ -43,17 +48,17 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
"/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{
|
"/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{
|
||||||
"logout": {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
"logout": {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option("sid"), kit.MDB_STATUS, "logout")
|
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout")
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||||
if strings.TrimSpace(m.Option("sid")) == "" {
|
if strings.TrimSpace(m.Option(SID)) == "" {
|
||||||
m.Option("sid", m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH,
|
m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "login",
|
||||||
"status", "login", "username", m.Option("username"), "hostname", m.Option("hostname"), "pid", m.Option("pid"), "pwd", m.Option("pwd")))
|
aaa.USERNAME, m.Option(aaa.USERNAME), aaa.HOSTNAME, m.Option(aaa.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD)))
|
||||||
} else {
|
} else {
|
||||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option("sid"), kit.MDB_STATUS, "login")
|
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "login")
|
||||||
}
|
}
|
||||||
m.Echo(m.Option("sid"))
|
m.Echo(m.Option(SID))
|
||||||
}},
|
}},
|
||||||
web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if f, _, e := m.R.FormFile(SUB); e == nil {
|
if f, _, e := m.R.FormFile(SUB); e == nil {
|
||||||
@ -65,11 +70,11 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||||
if strings.TrimSpace(m.Option("sid")) != "" {
|
if strings.TrimSpace(m.Option(SID)) != "" {
|
||||||
msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option("sid")))
|
msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option(SID)))
|
||||||
if m.Option("sid", msg.Append("hash")) != "" {
|
if m.Option(SID, msg.Append(kit.MDB_HASH)) != "" {
|
||||||
m.Option("username", msg.Append("username"))
|
m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME))
|
||||||
m.Option("hostname", msg.Append("hostname"))
|
m.Option(aaa.HOSTNAME, msg.Append(aaa.HOSTNAME))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Render(ice.RENDER_RESULT)
|
m.Render(ice.RENDER_RESULT)
|
||||||
|
@ -9,11 +9,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
ARG = "arg"
|
|
||||||
SUB = "sub"
|
|
||||||
PWD = "pwd"
|
|
||||||
)
|
|
||||||
const SYNC = "sync"
|
const SYNC = "sync"
|
||||||
const SHELL = "shell"
|
const SHELL = "shell"
|
||||||
|
|
||||||
@ -44,17 +39,28 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
|
if m.Option("_control", "page"); m.Option("cache.limit") == "" {
|
||||||
m.PushAction("收藏")
|
m.Option("cache.limit", "10")
|
||||||
|
}
|
||||||
|
if m.Option("cache.value") == "" {
|
||||||
|
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
|
||||||
|
} else {
|
||||||
|
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option("cache.field"), m.Option("cache.value"))
|
||||||
|
}
|
||||||
|
if len(arg) == 0 {
|
||||||
|
m.PushAction("收藏")
|
||||||
|
}
|
||||||
}},
|
}},
|
||||||
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "history":
|
case "history":
|
||||||
vs := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4)
|
ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4)
|
||||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, vs[0],
|
if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" {
|
||||||
aaa.HOSTNAME, m.Option(aaa.HOSTNAME), aaa.USERNAME, m.Option(aaa.USERNAME),
|
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0],
|
||||||
kit.MDB_TEXT, strings.Join(vs[3:], " "), PWD, m.Option(PWD), kit.MDB_TIME, vs[1]+" "+vs[2])
|
aaa.HOSTNAME, m.Option(aaa.HOSTNAME), aaa.USERNAME, m.Option(aaa.USERNAME),
|
||||||
|
kit.MDB_TEXT, text, PWD, m.Option(PWD), kit.MDB_TIME, ls[1]+" "+ls[2])
|
||||||
|
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0],
|
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0],
|
||||||
kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD))
|
kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD))
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
package zsh
|
|
||||||
|
|
||||||
import (
|
|
||||||
ice "github.com/shylinux/icebergs"
|
|
||||||
kit "github.com/shylinux/toolkits"
|
|
||||||
|
|
||||||
"net/url"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
Index.Merge(&ice.Context{
|
|
||||||
Commands: map[string]*ice.Command{
|
|
||||||
"/help": {Name: "/help", Help: "帮助", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
m.Cmdy("help")
|
|
||||||
}},
|
|
||||||
"/login": {Name: "/login", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
m.Cmdy("login", "init", c.Name)
|
|
||||||
}},
|
|
||||||
"/logout": {Name: "/logout", Help: "登出", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
m.Cmdy("login", "exit")
|
|
||||||
}},
|
|
||||||
|
|
||||||
"/ish": {Name: "/ish", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
if sub, e := url.QueryUnescape(m.Option("sub")); m.Assert(e) {
|
|
||||||
m.Cmdy(kit.Split(sub))
|
|
||||||
if len(m.Resultv()) == 0 {
|
|
||||||
m.Table()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}},
|
|
||||||
},
|
|
||||||
}, nil)
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user