1
0
forked from x/icebergs

add web.count

This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-12-11 22:15:23 +08:00
parent afdebbdc67
commit 32e5ea4067
6 changed files with 46 additions and 25 deletions

View File

@ -8,6 +8,7 @@ import (
"strings" "strings"
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
"shylinux.com/x/toolkits/logs" "shylinux.com/x/toolkits/logs"
"shylinux.com/x/toolkits/miss" "shylinux.com/x/toolkits/miss"
@ -235,22 +236,21 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message {
m.Cmdy(SELECT, m.PrefixKey(), m.Option(SUBKEY), HASH, HashShort(m), arg, logs.FileLineMeta(-1)) m.Cmdy(SELECT, m.PrefixKey(), m.Option(SUBKEY), HASH, HashShort(m), arg, logs.FileLineMeta(-1))
kit.If(kit.Select(Config(m, SHORT), Config(m, SORT)), func(sort string) { kit.If(sort != UNIQ, func() { m.Sort(sort) }) }) kit.If(kit.Select(Config(m, SHORT), Config(m, SORT)), func(sort string) { kit.If(sort != UNIQ, func() { m.Sort(sort) }) })
if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() { if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() {
m.Options(ice.TABLE_CHECKBOX, Config(m, html.CHECKBOX))
return m.Action(CREATE, PRUNES) return m.Action(CREATE, PRUNES)
} }
if m.FieldsIsDetail() { m.Table(func(value ice.Maps) {
m.Table(func(value ice.Maps) { m.SetAppend().OptionFields(ice.FIELDS_DETAIL)
m.SetAppend().OptionFields(ice.FIELDS_DETAIL) kit.For(kit.Split(HashField(m)), func(key string) {
kit.For(kit.Split(HashField(m)), func(key string) { if key == HASH {
if key == HASH { m.Push(key, arg[0])
m.Push(key, arg[0]) } else {
} else { m.Push(key, value[key])
m.Push(key, value[key]) }
} delete(value, key)
delete(value, key)
})
kit.For(kit.SortedKey(value), func(k string) { m.Push(k, value[k]) })
}) })
} kit.For(kit.SortedKey(value), func(k string) { m.Push(k, value[k]) })
})
return m return m
} }
func HashPrunes(m *ice.Message, cb func(Map) bool) *ice.Message { func HashPrunes(m *ice.Message, cb func(Map) bool) *ice.Message {

View File

@ -10,10 +10,22 @@ const COUNT = "count"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
COUNT: &ice.Command{Help: "计数", Actions: ice.MergeActions(ice.Actions{ COUNT: &ice.Command{Name: "count hash auto location", Help: "计数", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create type name text", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type name text", Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelectUpdate(m, mdb.HashCreate(m), func(value ice.Map) { value[mdb.COUNT] = kit.Int(value[mdb.COUNT]) + 1 }) mdb.HashSelectUpdate(m, mdb.HashCreate(m), func(value ice.Map) { value[mdb.COUNT] = kit.Int(value[mdb.COUNT]) + 1 })
}}, }},
}, mdb.HashAction(mdb.LIMIT, 1000, mdb.LEAST, 500, mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,type,name,text", mdb.SORT, "type,name,text"))}, "location": {Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelects(m).Sort(mdb.COUNT, ice.INT_R)
GoToast(m, "", func(toast func(string, int, int)) []string {
m.Table(func(index int, value ice.Maps) {
location := kit.Format(kit.Value(SpideGet(m, "http://opendata.baidu.com/api.php?query=%s&co=&resource_id=6006&oe=utf8", value["name"]), "data.0.location"))
toast(location, index, m.Length())
mdb.HashModify(m, mdb.HASH, value[mdb.HASH], "location", location)
m.Sleep("500ms")
})
return nil
})
}},
}, mdb.HashAction(mdb.LIMIT, 1000, mdb.LEAST, 500, mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,type,name,text", mdb.SORT, "type,name,text,location"))},
}) })
} }

View File

@ -80,4 +80,5 @@ func FormatDanger(value string) string {
const ( const (
AcceptLanguage = "Accept-Language" AcceptLanguage = "Accept-Language"
CHECKBOX = "checkbox"
) )

View File

@ -11,6 +11,7 @@ import (
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -25,18 +26,21 @@ func _route_match(m *ice.Message, space string, cb func(ice.Maps, int, []ice.Map
if m.Warn(err) { if m.Warn(err) {
return return
} }
list := []ice.Maps{} res := []ice.Maps{}
list := kit.Split(space)
m.Cmd("").Table(func(value ice.Maps) { m.Cmd("").Table(func(value ice.Maps) {
if value[mdb.STATUS] == OFFLINE { if value[mdb.STATUS] == OFFLINE {
} else if value[SPACE] == space { } else if value[SPACE] == space {
list = append(list, value) res = append(res, value)
} else if kit.IsIn(value[SPACE], list...) {
res = append(res, value)
} else if reg.MatchString(kit.Format("%s:%s=%s@%s", value[SPACE], value[mdb.TYPE], value[nfs.MODULE], value[nfs.VERSION])) { } else if reg.MatchString(kit.Format("%s:%s=%s@%s", value[SPACE], value[mdb.TYPE], value[nfs.MODULE], value[nfs.VERSION])) {
list = append(list, value) res = append(res, value)
} }
}) })
for i, item := range list { for i, item := range res {
cb(item, i, list) cb(item, i, res)
} }
} }
func _route_toast(m *ice.Message, space string, args ...string) { func _route_toast(m *ice.Message, space string, args ...string) {
@ -133,7 +137,7 @@ func init() {
kit.If(value[mdb.STATUS] == OFFLINE, func() { mdb.HashRemove(m, SPACE, value[SPACE]) }) kit.If(value[mdb.STATUS] == OFFLINE, func() { mdb.HashRemove(m, SPACE, value[SPACE]) })
}) })
}}, }},
}, mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) { }, mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", html.CHECKBOX, ice.TRUE, mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 1 { if len(arg) > 1 {
_route_match(m, arg[0], func(value ice.Maps, i int, list []ice.Maps) { _route_match(m, arg[0], func(value ice.Maps, i int, list []ice.Maps) {
_route_push(m, value[SPACE], m.Cmd(SPACE, value[SPACE], arg[1:])) _route_push(m, value[SPACE], m.Cmd(SPACE, value[SPACE], arg[1:]))

View File

@ -203,7 +203,7 @@ func init() {
m.Cmdy(nfs.DIR, ice.USR_ICONS, nfs.PATH).CutTo(nfs.PATH, arg[0]) m.Cmdy(nfs.DIR, ice.USR_ICONS, nfs.PATH).CutTo(nfs.PATH, arg[0])
case aaa.PASSWORD: case aaa.PASSWORD:
m.SetAppend() m.SetAppend()
case ctx.INDEX: case ctx.INDEX, ice.CMD:
if space := m.Option(SPACE); space != "" { if space := m.Option(SPACE); space != "" {
m.Options(SPACE, []string{}).Cmdy(SPACE, space, ctx.COMMAND) m.Options(SPACE, []string{}).Cmdy(SPACE, space, ctx.COMMAND)
} else { } else {

View File

@ -57,6 +57,7 @@ const (
type relay struct { type relay struct {
ice.Hash ice.Hash
ice.Code ice.Code
checkbox string `data:"true"`
short string `data:"machine"` short string `data:"machine"`
field string `data:"time,machine,username,password,host,port,portal,module,version,commit,compile,boot,package,shell,kernel,arch,ncpu,vcpu,mhz,mem,disk,network,listen,socket,proc,vendor"` field string `data:"time,machine,username,password,host,port,portal,module,version,commit,compile,boot,package,shell,kernel,arch,ncpu,vcpu,mhz,mem,disk,network,listen,socket,proc,vendor"`
statsTables string `name:"statsTables" event:"stats.tables"` statsTables string `name:"statsTables" event:"stats.tables"`
@ -68,6 +69,7 @@ type relay struct {
forFlow string `name:"forFlow machine cmd*:textarea=pwd" help:"流程"` forFlow string `name:"forFlow machine cmd*:textarea=pwd" help:"流程"`
list string `name:"list machine auto" help:"代理"` list string `name:"list machine auto" help:"代理"`
pushbin string `name:"pushbin" help:"部署"` pushbin string `name:"pushbin" help:"部署"`
adminCmd string `name:"adminCmd cmd" help:"命令"`
} }
func (s relay) Init(m *ice.Message, arg ...string) { func (s relay) Init(m *ice.Message, arg ...string) {
@ -203,10 +205,10 @@ func (s relay) List(m *ice.Message, arg ...string) *ice.Message {
stats[DISK_TOTAL] += kit.Int(ls[1]) stats[DISK_TOTAL] += kit.Int(ls[1])
} }
if value[web.PORTAL] == "" { if value[web.PORTAL] == "" {
m.Push(web.LINK, "").PushButton(s.Xterm, s.Pushbin, s.Install, s.Remove) m.Push(web.LINK, "").PushButton(s.Xterm, s.AdminCmd, s.Pushbin, s.Install, s.Remove)
return return
} }
m.PushButton(s.Admin, s.Vimer, s.Repos, s.Xterm, s.Pushbin, s.Upgrade, s.Remove) m.PushButton(s.Admin, s.Vimer, s.Repos, s.Xterm, s.AdminCmd, s.Pushbin, s.Upgrade, s.Remove)
switch value[web.PORTAL] { switch value[web.PORTAL] {
case tcp.PORT_443: case tcp.PORT_443:
m.Push(web.LINK, kit.Format("https://%s", value[tcp.HOST])) m.Push(web.LINK, kit.Format("https://%s", value[tcp.HOST]))
@ -219,7 +221,6 @@ func (s relay) List(m *ice.Message, arg ...string) *ice.Message {
}) })
_stats := kit.Dict(MEM, kit.FmtSize(stats[MEM_FREE], stats[MEM_TOTAL]), DISK, kit.FmtSize(stats[DISK_USED], stats[DISK_TOTAL])) _stats := kit.Dict(MEM, kit.FmtSize(stats[MEM_FREE], stats[MEM_TOTAL]), DISK, kit.FmtSize(stats[DISK_USED], stats[DISK_TOTAL]))
m.StatusTimeCount(m.Spawn().Options(stats, _stats).OptionSimple(VCPU, MEM, DISK, SOCKET, PROC)) m.StatusTimeCount(m.Spawn().Options(stats, _stats).OptionSimple(VCPU, MEM, DISK, SOCKET, PROC))
m.Options(ice.TABLE_CHECKBOX, ice.TRUE)
m.RewriteAppend(func(value, key string, index int) string { m.RewriteAppend(func(value, key string, index int) string {
if key == MEM { if key == MEM {
if ls := kit.Split(value, " /"); len(ls) > 0 && kit.Int(ls[0]) < 256*1024*1024 { if ls := kit.Split(value, " /"); len(ls) > 0 && kit.Int(ls[0]) < 256*1024*1024 {
@ -257,6 +258,9 @@ func (s relay) Pushbin(m *ice.Message, arg ...string) {
} }
s.shell(m, m.Template(PUSHBIN_SH), arg...) s.shell(m, m.Template(PUSHBIN_SH), arg...)
} }
func (s relay) AdminCmd(m *ice.Message, arg ...string) {
s.shell(m, kit.JoinWord("contexts/"+ice.BIN_ICE_BIN, web.ADMIN, m.Option(ice.CMD)), arg...)
}
func (s relay) Xterm(m *ice.Message, arg ...string) { s.Code.Xterm(m, m.Option(MACHINE), arg...) } func (s relay) Xterm(m *ice.Message, arg ...string) { s.Code.Xterm(m, m.Option(MACHINE), arg...) }
func (s relay) Repos(m *ice.Message, arg ...string) { s.iframeCmd(m, web.CODE_GIT_STATUS, arg...) } func (s relay) Repos(m *ice.Message, arg ...string) { s.iframeCmd(m, web.CODE_GIT_STATUS, arg...) }