From cf184b384e1e5ce0e8296ffa851096edc73a3ce8 Mon Sep 17 00:00:00 2001 From: shylinux Date: Thu, 23 Mar 2023 01:48:27 +0800 Subject: [PATCH] opt mdb --- base/cli/mirrors.go | 2 +- base/mdb/hash.go | 34 +++---------- base/mdb/lock.go | 6 +-- base/mdb/mdb.go | 110 +++++++++++++++++------------------------- base/mdb/render.go | 3 +- base/mdb/zone.go | 12 ++--- base/tcp/client.go | 2 +- base/tcp/host.go | 2 +- base/tcp/server.go | 2 +- base/web/broad.go | 2 +- base/web/serve.go | 2 +- base/web/space.go | 2 +- base/web/spide.go | 2 +- core/chat/template.go | 2 +- misc/git/repos.go | 2 +- 15 files changed, 69 insertions(+), 116 deletions(-) diff --git a/base/cli/mirrors.go b/base/cli/mirrors.go index 521b7316..392fed3d 100644 --- a/base/cli/mirrors.go +++ b/base/cli/mirrors.go @@ -36,7 +36,7 @@ func init() { }) }}, ALPINE: {Name: "alpine cli cmd", Hand: func(m *ice.Message, arg ...string) { IsAlpine(m, arg...) }}, - }, mdb.ZoneAction(mdb.SHORT, CLI, mdb.FIELD, "time,id,osid,cmd"), mdb.ClearHashOnExitAction())}, + }, mdb.ZoneAction(mdb.SHORT, CLI, mdb.FIELD, "time,id,osid,cmd"), mdb.ClearOnExitHashAction())}, }) } diff --git a/base/mdb/hash.go b/base/mdb/hash.go index b2019394..e3053fb9 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -70,20 +70,14 @@ func _hash_select(m *ice.Message, prefix, chain, field, value string) { } func _hash_select_field(m *ice.Message, prefix, chain string, key string, field string) (value string) { defer RLock(m, prefix, chain)() - Richs(m, prefix, chain, key, func(key string, val Map) { - if field == HASH { - value = key - } else { - value = kit.Format(val[field]) - } - }) + Richs(m, prefix, chain, key, func(key string, val Map) { value = kit.Select(kit.Format(val[field]), key, field == HASH) }) return } func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) { fields := _hash_fields(m) defer RLock(m, prefix, chain)() Richs(m, prefix, chain, FOREACH, func(key string, value Map) { - switch value = kit.GetMeta(value); cb := m.OptionCB(PRUNES).(type) { + switch value = kit.GetMeta(value); cb := m.OptionCB("").(type) { case func(string, Map) bool: kit.If(cb(key, value), func() { m.Push(key, value, fields) }) default: @@ -150,7 +144,7 @@ func StatusHashAction(arg ...Any) ice.Actions { }}, }, HashAction(arg...)) } -func ClearHashOnExitAction() ice.Actions { +func ClearOnExitHashAction() ice.Actions { return ice.MergeActions(ice.Actions{ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { Conf(m, m.PrefixKey(), HASH, "") }}}) } @@ -199,12 +193,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message { } func HashPrunes(m *ice.Message, cb func(Map) bool) *ice.Message { expire := kit.Select(m.Time("-"+kit.Select(DAYS, Config(m, EXPIRE))), m.Option("before")) - m.OptionCB(PRUNES, func(key string, value Map) bool { - if kit.Format(value[TIME]) > expire { - return false - } - return cb == nil || cb(value) - }) + m.OptionCB(PRUNES, func(key string, value Map) bool { return kit.Format(value[TIME]) < expire && (cb == nil || cb(value)) }) return m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, ice.OptionFields(HashField(m))).StatusTimeCount() } func HashExport(m *ice.Message, arg ...Any) *ice.Message { @@ -245,13 +234,7 @@ func HashSelectDetails(m *ice.Message, key string, cb func(Map) bool) Map { return val } func HashSelectField(m *ice.Message, key string, field string) (value string) { - HashSelectDetail(m, key, func(key string, val Map) { - if field == HASH { - value = key - } else { - value = kit.Format(kit.Value(val, field)) - } - }) + HashSelectDetail(m, key, func(key string, val Map) { value = kit.Select(kit.Format(kit.Value(val, field)), key, field == HASH) }) return } func HashSelectTarget(m *ice.Message, key string, create Any) (target Any) { @@ -270,10 +253,10 @@ func HashSelectTarget(m *ice.Message, key string, create Any) (target Any) { return } switch create := create.(type) { - case func(Map) Any: - target = create(value) case func(Maps) Any: target = create(ToMaps(value)) + case func(Map) Any: + target = create(value) case func() Any: target = create() default: @@ -318,8 +301,5 @@ func Rich(m *ice.Message, prefix string, chain Any, data Any) string { cache = kit.Data() m.Confv(prefix, chain, cache) } - if m.Option(SHORT) != "" { - kit.Value(cache, kit.Keym(SHORT), m.Option(SHORT)) - } return miss.Rich(path.Join(prefix, kit.Keys(chain)), cache, data) } diff --git a/base/mdb/lock.go b/base/mdb/lock.go index 62c6f704..664ed0f0 100644 --- a/base/mdb/lock.go +++ b/base/mdb/lock.go @@ -52,6 +52,9 @@ func Confv(m configMessage, arg ...Any) Any { } return m.Confv(arg...) } +func Conf(m configMessage, arg ...Any) string { + return kit.Format(Confv(m, arg...)) +} func Confm(m configMessage, key string, sub Any, cbs ...Any) Map { val := m.Confv(key, sub) if len(cbs) > 0 { @@ -60,9 +63,6 @@ func Confm(m configMessage, key string, sub Any, cbs ...Any) Map { value, _ := val.(Map) return value } -func Conf(m configMessage, arg ...Any) string { - return kit.Format(Confv(m, arg...)) -} var cache = sync.Map{} diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index cb6beb2a..f0774856 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -136,86 +136,66 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: ice.Commands ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {}}, ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) {}}, INPUTS: {Name: "inputs key sub type field value", Hand: func(m *ice.Message, arg ...string) { - switch arg[2] { - case HASH: - _hash_inputs(m, arg[0], arg[1], kit.Select(NAME, arg, 3), kit.Select("", arg, 4)) - case ZONE: - _zone_inputs(m, arg[0], arg[1], arg[3], kit.Select(NAME, arg, 4), kit.Select("", arg, 5)) - case LIST: - _list_inputs(m, arg[0], arg[1], kit.Select(NAME, arg, 3), kit.Select("", arg, 4)) - } + kit.Switch(arg[2], + HASH, func() { _hash_inputs(m, arg[0], arg[1], kit.Select(NAME, arg, 3), kit.Select("", arg, 4)) }, + ZONE, func() { _zone_inputs(m, arg[0], arg[1], arg[3], kit.Select(NAME, arg, 4), kit.Select("", arg, 5)) }, + LIST, func() { _list_inputs(m, arg[0], arg[1], kit.Select(NAME, arg, 3), kit.Select("", arg, 4)) }, + ) }}, INSERT: {Name: "insert key sub type arg...", Hand: func(m *ice.Message, arg ...string) { - switch arg[2] { - case HASH: - _hash_insert(m, arg[0], arg[1], arg[3:]...) - case ZONE: - _zone_insert(m, arg[0], arg[1], arg[3], arg[4:]...) - case LIST: - _list_insert(m, arg[0], arg[1], arg[3:]...) - } + kit.Switch(arg[2], + HASH, func() { _hash_insert(m, arg[0], arg[1], arg[3:]...) }, + ZONE, func() { _zone_insert(m, arg[0], arg[1], arg[3], arg[4:]...) }, + LIST, func() { _list_insert(m, arg[0], arg[1], arg[3:]...) }, + ) }}, DELETE: {Name: "delete key sub type field value", Hand: func(m *ice.Message, arg ...string) { - switch arg[2] { - case HASH: - _hash_delete(m, arg[0], arg[1], arg[3], arg[4]) - case ZONE: - // _list_delete(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), arg[4], arg[5]) - case LIST: - // _list_delete(m, arg[0], arg[1], arg[3], arg[4]) - } + kit.Switch(arg[2], + HASH, func() { _hash_delete(m, arg[0], arg[1], arg[3], arg[4]) }, + // ZONE, func() { _list_delete(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), arg[4], arg[5]) }, + // LIST, func() { _list_delete(m, arg[0], arg[1], arg[3], arg[4]) }, + ) }}, MODIFY: {Name: "modify key sub type field value arg...", Hand: func(m *ice.Message, arg ...string) { - switch arg[2] { - case HASH: - _hash_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) - case ZONE: - _zone_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) - case LIST: - _list_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) - } + kit.Switch(arg[2], + HASH, func() { _hash_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) }, + ZONE, func() { _zone_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) }, + LIST, func() { _list_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) }, + ) }}, SELECT: {Name: "select key sub type field value", Hand: func(m *ice.Message, arg ...string) { - switch arg[2] { - case HASH: - _hash_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select(FOREACH, arg, 4)) - case ZONE: - _zone_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select("", arg, 4)) - case LIST: - _list_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select("", arg, 4)) - } + kit.Switch(arg[2], + HASH, func() { _hash_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select(FOREACH, arg, 4)) }, + ZONE, func() { _zone_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select("", arg, 4)) }, + LIST, func() { _list_select(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select("", arg, 4)) }, + ) }}, PRUNES: {Name: "prunes key sub type [field value]...", Hand: func(m *ice.Message, arg ...string) { - switch arg[2] { - case HASH: - _hash_prunes(m, arg[0], arg[1], arg[3:]...) - m.Tables(func(value Maps) { _hash_delete(m, arg[0], arg[1], HASH, value[HASH]) }) - case ZONE: - // _list_prunes(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), arg[4:]...) - case LIST: - // _list_prunes(m, arg[0], arg[1], arg[3:]...) - } + kit.Switch(arg[2], + HASH, func() { + _hash_prunes(m, arg[0], arg[1], arg[3:]...) + m.Tables(func(value Maps) { _hash_delete(m, arg[0], arg[1], HASH, value[HASH]) }) + }, + // ZONE, func() { _list_prunes(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), arg[4:]...) }, + // LIST, func() { _list_prunes(m, arg[0], arg[1], arg[3:]...) }, + ) }}, EXPORT: {Name: "export key sub type file", Hand: func(m *ice.Message, arg ...string) { m.OptionDefault(CACHE_LIMIT, "-1") - switch file := _mdb_export_file(m, arg...); arg[2] { - case HASH: - _hash_export(m, arg[0], arg[1], file) - case ZONE: - _zone_export(m, arg[0], arg[1], file) - case LIST: - _list_export(m, arg[0], arg[1], file) - } + file := _mdb_export_file(m, arg...) + kit.Switch(arg[2], + HASH, func() { _hash_export(m, arg[0], arg[1], file) }, + ZONE, func() { _zone_export(m, arg[0], arg[1], file) }, + LIST, func() { _list_export(m, arg[0], arg[1], file) }, + ) }}, IMPORT: {Name: "import key sub type file", Hand: func(m *ice.Message, arg ...string) { - switch file := _mdb_export_file(m, arg...); arg[2] { - case HASH: - _hash_import(m, arg[0], arg[1], file) - case ZONE: - _zone_import(m, arg[0], arg[1], file) - case LIST: - _list_import(m, arg[0], arg[1], file) - } + file := _mdb_export_file(m, arg...) + kit.Switch(arg[2], + HASH, func() { _hash_import(m, arg[0], arg[1], file) }, + ZONE, func() { _zone_import(m, arg[0], arg[1], file) }, + LIST, func() { _list_import(m, arg[0], arg[1], file) }, + ) }}, }} diff --git a/base/mdb/render.go b/base/mdb/render.go index b0899f4f..4c18abcb 100644 --- a/base/mdb/render.go +++ b/base/mdb/render.go @@ -23,6 +23,5 @@ func RenderAction(arg ...ice.Any) ice.Actions { }) }) }}, - ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { Conf(m, m.PrefixKey(), HASH, "") }}, - }) + }, ClearOnExitHashAction()) } diff --git a/base/mdb/zone.go b/base/mdb/zone.go index a082e5d6..e70a2730 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -151,12 +151,8 @@ func ZoneAction(arg ...ice.Any) ice.Actions { func PageZoneAction(arg ...ice.Any) ice.Actions { return ice.MergeActions(ice.Actions{ SELECT: {Name: "select zone id auto insert page", Hand: func(m *ice.Message, arg ...string) { PageZoneSelect(m, arg...) }}, - PREV: {Hand: func(m *ice.Message, arg ...string) { - PrevPageLimit(m, arg[0], arg[1:]...) - }}, - NEXT: {Hand: func(m *ice.Message, arg ...string) { - NextPage(m, arg[0], arg[1:]...) - }}, + PREV: {Hand: func(m *ice.Message, arg ...string) { PrevPageLimit(m, arg[0], arg[1:]...) }}, + NEXT: {Hand: func(m *ice.Message, arg ...string) { NextPage(m, arg[0], arg[1:]...) }}, }, ZoneAction(arg...)) } func ZoneKey(m *ice.Message) string { @@ -172,9 +168,7 @@ func ZoneField(m *ice.Message) string { return kit.Select(ZONE_FIELD, Config(m, func ZoneInputs(m *ice.Message, arg ...Any) { m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(ZoneKey(m)), arg) } -func ZoneCreate(m *ice.Message, arg ...Any) { - m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) -} +func ZoneCreate(m *ice.Message, arg ...Any) { m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) } func ZoneRemove(m *ice.Message, arg ...Any) { if args := kit.Simple(arg...); len(args) == 0 { arg = append(arg, m.OptionSimple(ZoneKey(m))) diff --git a/base/tcp/client.go b/base/tcp/client.go index 309ce515..87d07c41 100644 --- a/base/tcp/client.go +++ b/base/tcp/client.go @@ -71,6 +71,6 @@ func init() { DIAL: {Name: "dial type name port=9010 host=", Help: "连接", Hand: func(m *ice.Message, arg ...string) { _client_dial(m, arg...) }}, - }, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nread,nwrite"), mdb.ClearHashOnExitAction())}, + }, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nread,nwrite"), mdb.ClearOnExitHashAction())}, }) } diff --git a/base/tcp/host.go b/base/tcp/host.go index eaab0012..9b6a1165 100644 --- a/base/tcp/host.go +++ b/base/tcp/host.go @@ -90,7 +90,7 @@ func init() { GATEWAY: {Hand: func(m *ice.Message, arg ...string) { m.Push(aaa.IP, kit.Keys(kit.Slice(strings.Split(m.Cmd("").Append(aaa.IP), ice.PT), 0, 3), "1")) }}, - }, mdb.HashAction(mdb.SHORT, mdb.TEXT), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.SHORT, mdb.TEXT), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { _host_list(m, kit.Select("", arg, 0)) }}, }) diff --git a/base/tcp/server.go b/base/tcp/server.go index 1bf3de81..57b51b8b 100644 --- a/base/tcp/server.go +++ b/base/tcp/server.go @@ -66,6 +66,6 @@ func init() { LISTEN: {Name: "listen type name port=9030 host=", Hand: func(m *ice.Message, arg ...string) { _server_listen(m, arg...) }}, - }, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nconn"), mdb.ClearHashOnExitAction())}, + }, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nconn"), mdb.ClearOnExitHashAction())}, }) } diff --git a/base/web/broad.go b/base/web/broad.go index 0d2a4496..0dc82ecc 100644 --- a/base/web/broad.go +++ b/base/web/broad.go @@ -101,6 +101,6 @@ func init() { tcp.SEND: {Hand: func(m *ice.Message, arg ...string) { _broad_send(m, "", "", "255.255.255.255", "9020", arg...) }}, - }, mdb.HashAction(mdb.SHORT, "host,port", mdb.FIELD, "time,hash,type,name,host,port", mdb.ACTION, OPEN), mdb.ClearHashOnExitAction())}, + }, mdb.HashAction(mdb.SHORT, "host,port", mdb.FIELD, "time,hash,type,name,host,port", mdb.ACTION, OPEN), mdb.ClearOnExitHashAction())}, }) } diff --git a/base/web/serve.go b/base/web/serve.go index 45b4f7ee..27a06bca 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -212,7 +212,7 @@ func init() { kit.If(len(arg) > 0, func() { ice.Info.Domain, ice.Info.Localhost = arg[0], false }) m.Echo(ice.Info.Domain) }}, - }, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port", tcp.LOCALHOST, ice.TRUE), mdb.ClearHashOnExitAction(), ServeAction())}, + }, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port", tcp.LOCALHOST, ice.TRUE), mdb.ClearOnExitHashAction(), ServeAction())}, PP(ice.INTSHELL): {Name: "/intshell/", Help: "命令行", Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) { RenderIndex(m, arg...) }}, diff --git a/base/web/space.go b/base/web/space.go index 8f6ae6bd..e19b4b99 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -223,7 +223,7 @@ func init() { ice.PS: {Hand: func(m *ice.Message, arg ...string) { _space_fork(m) }}, }, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,type,name,text", ctx.ACTION, OPEN, REDIAL, kit.Dict("a", 3000, "b", 1000, "c", 1000), - ), mdb.ClearHashOnExitAction(), SpaceAction(), aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) { + ), mdb.ClearOnExitHashAction(), SpaceAction(), aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) < 2 { mdb.HashSelect(m, arg...).Sort("type,name,text") m.Tables(func(values ice.Maps) { diff --git a/base/web/spide.go b/base/web/spide.go index 8f8a6f50..8792de9b 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -296,7 +296,7 @@ func init() { MERGE: {Hand: func(m *ice.Message, arg ...string) { m.Echo(kit.MergeURL2(m.CmdAppend("", arg[0], CLIENT_URL), arg[1], arg[2:])) }}, - }, mdb.HashAction(mdb.SHORT, CLIENT_NAME, mdb.FIELD, "time,client.name,client.url", LOGHEADERS, ice.FALSE), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.SHORT, CLIENT_NAME, mdb.FIELD, "time,client.name,client.url", LOGHEADERS, ice.FALSE), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") { mdb.HashSelect(m, kit.Slice(arg, 0, 1)...).Sort(CLIENT_NAME) } else { diff --git a/core/chat/template.go b/core/chat/template.go index 30ed1db8..a19a67a9 100644 --- a/core/chat/template.go +++ b/core/chat/template.go @@ -50,7 +50,7 @@ func init() { m.Cmd(mdb.DELETE, m.PrefixKey(), kit.KeyHash(m.Option(RIVER)), mdb.HASH, m.OptionSimple(STORM)) } }}, - }, mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) { + }, mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { switch len(arg) { case 0: m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields("time,river")) diff --git a/misc/git/repos.go b/misc/git/repos.go index dd4f8cbf..45765ecc 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -251,7 +251,7 @@ func init() { } ctx.ProcessField(m, "", arg, arg...) }}, - }, mdb.HashAction(mdb.SHORT, REPOS, mdb.FIELD, "time,repos,branch,commit,origin"), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.SHORT, REPOS, mdb.FIELD, "time,repos,branch,commit,origin"), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 || arg[0] == "" { mdb.HashSelect(m, arg...).Action(mdb.CREATE) } else if dir := _git_dir(_repos_path(arg[0])); len(arg) == 1 || arg[1] == "" {