From 1b8a538c7c5c00de118f14bd413b196d6af43e85 Mon Sep 17 00:00:00 2001 From: shaoying Date: Sun, 13 Sep 2020 00:10:56 +0800 Subject: [PATCH] add cache.limit --- base/mdb/mdb.go | 7 +++++++ base/web/dream.go | 1 - base/web/serve.go | 4 ++++ data.go | 12 ++++++++++++ misc/zsh/bash.shy | 3 ++- misc/zsh/sess.go | 39 ++++++++++++++++++++++----------------- misc/zsh/sync.go | 28 +++++++++++++++++----------- misc/zsh/trash.go | 33 --------------------------------- 8 files changed, 64 insertions(+), 63 deletions(-) delete mode 100644 misc/zsh/trash.go diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index fe317078..05da77de 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -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) { 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 { if val[arg[i]] != arg[i+1] { 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) { + m.Conf(arg[0], arg[1]) + + m.Option("cache.begin") + m.Option("cache.begin") switch arg[2] { case HASH: _hash_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select(kit.MDB_FOREACH, arg, 4)) diff --git a/base/web/dream.go b/base/web/dream.go index 97777574..a53a8c2c 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -37,7 +37,6 @@ func _dream_show(m *ice.Message, name string) { p := path.Join(m.Conf(DREAM, "meta.path"), name) os.MkdirAll(p, ice.MOD_DIR) - m.Debug("what %v", m.Option("repos")) if m.Option("repos") != "" { m.Cmd("web.code.git.repos", "create", "remote", m.Option("repos"), "path", p) } diff --git a/base/web/serve.go b/base/web/serve.go index f6df33ac..1bfd7509 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -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_USERWEB, kit.Select(msg.Conf(SHARE, "meta.domain"), r.Header.Get("Referer"))) 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 { msg.Option("_option", msg.Optionv(ice.MSG_OPTION)) diff --git a/data.go b/data.go index 4bd60dae..bfb1819b 100644 --- a/data.go +++ b/data.go @@ -33,6 +33,18 @@ func (m *Message) Grows(key string, chain interface{}, match string, value strin if cache == 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, kit.Int(kit.Select("0", m.Option("cache.offend"))), kit.Int(kit.Select("10", m.Option("cache.limit"))), diff --git a/misc/zsh/bash.shy b/misc/zsh/bash.shy index c001f5ea..73fb6a98 100644 --- a/misc/zsh/bash.shy +++ b/misc/zsh/bash.shy @@ -26,7 +26,8 @@ cd ./_install chapter "应用" web.code.zsh.sess contexts -field "会话" web.code.zsh.sess + +field "命令行" web.code.zsh.sess field "收藏夹" web.code.zsh.favor field "同步流" web.code.zsh.sync diff --git a/misc/zsh/sess.go b/misc/zsh/sess.go index f99099b8..86212b9c 100644 --- a/misc/zsh/sess.go +++ b/misc/zsh/sess.go @@ -2,6 +2,7 @@ package zsh import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" @@ -11,6 +12,13 @@ import ( "strings" ) +const ( + SID = "sid" + ARG = "arg" + SUB = "sub" + PWD = "pwd" + PID = "pid" +) const SESS = "sess" func init() { @@ -22,7 +30,7 @@ func init() { )}, }, 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) { 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))) @@ -31,11 +39,8 @@ func init() { m.Cmdy("web.wiki.spark", "shell", string(buf)) } }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, m.Prefix(SESS), "", mdb.HASH) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(SESS), "", mdb.HASH) + mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "logout") }}, }, 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)) @@ -43,17 +48,17 @@ func init() { }}, "/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{ "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) { m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) - if strings.TrimSpace(m.Option("sid")) == "" { - m.Option("sid", m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, - "status", "login", "username", m.Option("username"), "hostname", m.Option("hostname"), "pid", m.Option("pid"), "pwd", m.Option("pwd"))) + if strings.TrimSpace(m.Option(SID)) == "" { + m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "login", + aaa.USERNAME, m.Option(aaa.USERNAME), aaa.HOSTNAME, m.Option(aaa.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD))) } 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) { 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)) - if 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")) != "" { - m.Option("username", msg.Append("username")) - m.Option("hostname", msg.Append("hostname")) + if 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(kit.MDB_HASH)) != "" { + m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) + m.Option(aaa.HOSTNAME, msg.Append(aaa.HOSTNAME)) } } m.Render(ice.RENDER_RESULT) diff --git a/misc/zsh/sync.go b/misc/zsh/sync.go index e1837e46..8cba4c19 100644 --- a/misc/zsh/sync.go +++ b/misc/zsh/sync.go @@ -9,11 +9,6 @@ import ( "strings" ) -const ( - ARG = "arg" - SUB = "sub" - PWD = "pwd" -) const SYNC = "sync" const SHELL = "shell" @@ -44,17 +39,28 @@ func init() { }}, }, 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.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) - m.PushAction("收藏") + if m.Option("_control", "page"); m.Option("cache.limit") == "" { + 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) { switch arg[0] { case "history": - vs := 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], - aaa.HOSTNAME, m.Option(aaa.HOSTNAME), aaa.USERNAME, m.Option(aaa.USERNAME), - kit.MDB_TEXT, strings.Join(vs[3:], " "), PWD, m.Option(PWD), kit.MDB_TIME, vs[1]+" "+vs[2]) + ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4) + if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" { + m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0], + 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: 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)) diff --git a/misc/zsh/trash.go b/misc/zsh/trash.go deleted file mode 100644 index c68eaf6e..00000000 --- a/misc/zsh/trash.go +++ /dev/null @@ -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) -}