From 4fd30e611dbc6ffa8dcb5b5ea823566cb5a02054 Mon Sep 17 00:00:00 2001 From: shy Date: Tue, 12 Dec 2023 08:42:16 +0800 Subject: [PATCH] add web --- base/web/count.go | 57 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/base/web/count.go b/base/web/count.go index c5bec2c5..dd1e78ab 100644 --- a/base/web/count.go +++ b/base/web/count.go @@ -8,14 +8,59 @@ import ( kit "shylinux.com/x/toolkits" ) +func _count_stat(m *ice.Message, arg ...string) map[string]int { + stat := map[string]int{} + m.Table(func(value ice.Maps) { + count := kit.Int(value[mdb.COUNT]) + stat[mdb.TOTAL] += count + for _, agent := range []string{"美国", "电信", "联通", "移动", "阿里云", "腾讯云"} { + if strings.Contains(value["location"], agent) { + stat[agent] += count + break + } + } + for _, agent := range []string{"Go-http-client", "GoModuleMirror", "git", "compatible"} { + if strings.Contains(value[mdb.TEXT], agent) { + stat[agent] += count + return + } + } + for _, agent := range []string{"Chrome", "Safari", "MSIE", "Firefox"} { + if strings.Contains(value[mdb.TEXT], agent) { + stat[agent] += count + break + } + } + for _, agent := range []string{"Android", "iPhone", "Mac", "Linux", "Windows"} { + if strings.Contains(value[mdb.TEXT], agent) { + stat[agent] += count + break + } + } + }) + return stat +} + const COUNT = "count" func init() { Index.MergeCommands(ice.Commands{ - COUNT: &ice.Command{Name: "count hash auto location", Help: "计数", Actions: ice.MergeActions(ice.Actions{ + COUNT: &ice.Command{Name: "count hash auto valid location", Help: "计数", Actions: ice.MergeActions(ice.Actions{ 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 }) }}, + "valid": {Hand: func(m *ice.Message, arg ...string) { + mdb.HashSelect(m.Spawn(), arg...).Table(func(value ice.Maps) { + if !strings.HasPrefix(value[mdb.TEXT], "Mozilla/") { + return + } else if count := kit.Int(value[mdb.COUNT]); count < 3 { + return + } else { + m.Push("", value, kit.Split(mdb.Config(m, mdb.FIELD))) + } + }) + m.StatusTimeCount(_count_stat(m)) + }}, "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 { @@ -32,15 +77,7 @@ func init() { }}, }, mdb.HashAction(mdb.LIMIT, 1000, mdb.LEAST, 500, mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,location,type,name,text", mdb.SORT, "type,name,text,location")), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...) - stat := map[string]int{} - m.Table(func(value ice.Maps) { - for _, agent := range []string{"GoModuleMirror"} { - if strings.Contains(value[mdb.TEXT], agent) { - stat[agent]++ - } - } - }) - m.StatusTimeCount(stat) + m.StatusTimeCount(_count_stat(m)) }}, }) }