1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-29 02:29:22 +08:00
This commit is contained in:
shaoying 2021-06-14 00:29:53 +08:00
parent b3950d3e2a
commit 419a1d09f5
11 changed files with 63 additions and 77 deletions

View File

@ -23,6 +23,9 @@ func _sess_check(m *ice.Message, sessid string) {
}) })
} }
func _sess_create(m *ice.Message, username string) string { func _sess_create(m *ice.Message, username string) string {
if username == "" {
return ""
}
if m.Richs(USER, nil, username, nil) == nil { if m.Richs(USER, nil, username, nil) == nil {
_user_create(m, username, kit.Hashs()) _user_create(m, username, kit.Hashs())
} }
@ -41,9 +44,6 @@ func SessCheck(m *ice.Message, sessid string) {
_sess_check(m, sessid) _sess_check(m, sessid)
} }
func SessCreate(m *ice.Message, username string) string { func SessCreate(m *ice.Message, username string) string {
if username == "" {
return ""
}
return m.Option(ice.MSG_SESSID, _sess_create(m, username)) return m.Option(ice.MSG_SESSID, _sess_create(m, username))
} }
func SessIsCli(m *ice.Message) bool { func SessIsCli(m *ice.Message) bool {

View File

@ -12,8 +12,12 @@ import (
) )
func _cli_init(m *ice.Message) { func _cli_init(m *ice.Message) {
// 版本信息
kit.Fetch(kit.UnMarshal(kit.Format(ice.Info.Make)), func(key string, value interface{}) {
m.Conf(RUNTIME, kit.Keys(MAKE, strings.ToLower(key)), value)
})
// 启动配置 // 环境变量
for _, k := range []string{CTX_SELF, CTX_DEV, CTX_SHY, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} { for _, k := range []string{CTX_SELF, CTX_DEV, CTX_SHY, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} {
m.Conf(RUNTIME, kit.Keys(CONF, k), os.Getenv(k)) m.Conf(RUNTIME, kit.Keys(CONF, k), os.Getenv(k))
} }
@ -44,9 +48,6 @@ func _cli_init(m *ice.Message) {
ice.Info.PathName = m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME)) ice.Info.PathName = m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME))
ice.Info.UserName = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME)) ice.Info.UserName = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME))
ice.Info.CtxShare = m.Conf(RUNTIME, kit.Keys(CONF, CTX_SHARE))
ice.Info.CtxRiver = m.Conf(RUNTIME, kit.Keys(CONF, CTX_RIVER))
// 启动次数 // 启动次数
count := kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT))) + 1 count := kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT))) + 1
m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT), count) m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT), count)
@ -59,11 +60,6 @@ func _cli_init(m *ice.Message) {
n := kit.Int(kit.Select("1", m.Conf(RUNTIME, kit.Keys(HOST, "GOMAXPROCS")))) n := kit.Int(kit.Select("1", m.Conf(RUNTIME, kit.Keys(HOST, "GOMAXPROCS"))))
m.Logs(HOST, "GOMAXPROCS", n) m.Logs(HOST, "GOMAXPROCS", n)
runtime.GOMAXPROCS(n) runtime.GOMAXPROCS(n)
// 版本信息
kit.Fetch(kit.UnMarshal(kit.Format(ice.Info.Build)), func(key string, value interface{}) {
m.Conf(RUNTIME, kit.Keys(MAKE, strings.ToLower(key)), value)
})
} }
func NodeInfo(m *ice.Message, kind, name string) { func NodeInfo(m *ice.Message, kind, name string) {
name = strings.ReplaceAll(name, ".", "_") name = strings.ReplaceAll(name, ".", "_")

View File

@ -49,8 +49,7 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) {
kit.MDB_STATUS, ERROR, kit.MDB_ERROR, e) kit.MDB_STATUS, ERROR, kit.MDB_ERROR, e)
} else { } else {
m.Cost("args", cmd.Args, "code", cmd.ProcessState.ExitCode()) m.Cost("args", cmd.Args, "code", cmd.ProcessState.ExitCode())
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, h, m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, STOP)
kit.MDB_STATUS, STOP)
} }
if w, ok := m.Optionv(CMD_OUTPUT).(io.Closer); ok { if w, ok := m.Optionv(CMD_OUTPUT).(io.Closer); ok {
@ -86,7 +85,6 @@ func init() {
DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, path.Join(ice.USR_LOCAL, DAEMON))}, DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, path.Join(ice.USR_LOCAL, DAEMON))},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.PRUNES, DAEMON, "", mdb.HASH, mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE) m.Cmd(mdb.PRUNES, DAEMON, "", mdb.HASH, mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE)
}}, }},

View File

@ -17,11 +17,11 @@ import (
var _trans_web = map[string]color.Color{ var _trans_web = map[string]color.Color{
BLACK: color.RGBA{0, 0, 0, DARK}, BLACK: color.RGBA{0, 0, 0, DARK},
RED: color.RGBA{DARK, 0, 0, DARK}, RED: color.RGBA{DARK, 0, 0, DARK},
YELLOW: color.RGBA{DARK, DARK, 0, DARK},
GREEN: color.RGBA{0, DARK, 0, DARK}, GREEN: color.RGBA{0, DARK, 0, DARK},
CYAN: color.RGBA{0, DARK, DARK, DARK}, YELLOW: color.RGBA{DARK, DARK, 0, DARK},
BLUE: color.RGBA{0, 0, DARK, DARK}, BLUE: color.RGBA{0, 0, DARK, DARK},
MAGENTA: color.RGBA{DARK, 0, DARK, DARK}, MAGENTA: color.RGBA{DARK, 0, DARK, DARK},
CYAN: color.RGBA{0, DARK, DARK, DARK},
WHITE: color.RGBA{DARK, DARK, DARK, DARK}, WHITE: color.RGBA{DARK, DARK, DARK, DARK},
} }
@ -63,7 +63,7 @@ func _trans_cli(str string) string {
return kit.Format(res) return kit.Format(res)
} }
func _qrcode_cli(m *ice.Message, text string, arg ...string) { func _qrcode_cli(m *ice.Message, text string) {
qr, _ := qrcode.New(text, qrcode.Medium) qr, _ := qrcode.New(text, qrcode.Medium)
fg := _trans_cli(m.Option(FG)) fg := _trans_cli(m.Option(FG))
bg := _trans_cli(m.Option(BG)) bg := _trans_cli(m.Option(BG))
@ -82,8 +82,9 @@ func _qrcode_cli(m *ice.Message, text string, arg ...string) {
} }
m.Echo("\n") m.Echo("\n")
} }
m.Echo(text)
} }
func _qrcode_web(m *ice.Message, text string, arg ...string) { func _qrcode_web(m *ice.Message, text string) {
qr, _ := qrcode.New(text, qrcode.Medium) qr, _ := qrcode.New(text, qrcode.Medium)
qr.ForegroundColor = _parse_color(m.Option(FG)) qr.ForegroundColor = _parse_color(m.Option(FG))
qr.BackgroundColor = _parse_color(m.Option(BG)) qr.BackgroundColor = _parse_color(m.Option(BG))
@ -96,12 +97,7 @@ func _qrcode_web(m *ice.Message, text string, arg ...string) {
func Color(m *ice.Message, c string, str string) string { func Color(m *ice.Message, c string, str string) string {
wrap, color := `<span style="color:%s">%s</span>`, c wrap, color := `<span style="color:%s">%s</span>`, c
if aaa.SessIsCli(m) { if aaa.SessIsCli(m) {
wrap, color = "\033[3%sm%s\033[0m", map[string]string{ wrap, color = "\033[3%sm%s\033[0m", _trans_cli(c)
BLACK: "0",
RED: "1", GREEN: "2", YELLOW: "3",
BLUE: "4", MAGENTA: "5", CYAN: "6",
WHITE: "7",
}[c]
} }
return fmt.Sprintf(wrap, color, str) return fmt.Sprintf(wrap, color, str)
} }
@ -119,11 +115,11 @@ const (
const ( const (
BLACK = "black" BLACK = "black"
RED = "red" RED = "red"
YELLOW = "yellow"
GREEN = "green" GREEN = "green"
CYAN = "cyan" YELLOW = "yellow"
BLUE = "blue" BLUE = "blue"
MAGENTA = "magenta" MAGENTA = "magenta"
CYAN = "cyan"
WHITE = "white" WHITE = "white"
RANDOM = "random" RANDOM = "random"
) )

View File

@ -11,6 +11,28 @@ import (
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
func _runtime_hostinfo(m *ice.Message) {
if f, e := os.Open("/proc/cpuinfo"); e == nil {
defer f.Close()
if b, e := ioutil.ReadAll(f); e == nil {
m.Push("nCPU", bytes.Count(b, []byte("processor")))
}
}
if f, e := os.Open("/proc/meminfo"); e == nil {
defer f.Close()
if b, e := ioutil.ReadAll(f); e == nil {
for i, ls := range strings.Split(string(b), "\n") {
vs := kit.Split(ls, ": ")
m.Push(strings.TrimSpace(vs[0]), kit.FmtSize(kit.Int64(strings.TrimSpace(vs[1]))*1024))
if i > 1 {
break
}
}
}
}
m.Push("uptime", kit.Split(m.Cmdx(SYSTEM, "uptime"), ",")[0])
}
const ( const (
DISKINFO = "diskinfo" DISKINFO = "diskinfo"
IFCONFIG = "ifconfig" IFCONFIG = "ifconfig"
@ -47,25 +69,7 @@ func init() {
m.Echo(ice.Info.HostName) m.Echo(ice.Info.HostName)
}}, }},
HOSTINFO: {Name: "hostinfo", Help: "主机信息", Hand: func(m *ice.Message, arg ...string) { HOSTINFO: {Name: "hostinfo", Help: "主机信息", Hand: func(m *ice.Message, arg ...string) {
if f, e := os.Open("/proc/cpuinfo"); e == nil { _runtime_hostinfo(m)
defer f.Close()
if b, e := ioutil.ReadAll(f); e == nil {
m.Push("nCPU", bytes.Count(b, []byte("processor")))
}
}
if f, e := os.Open("/proc/meminfo"); e == nil {
defer f.Close()
if b, e := ioutil.ReadAll(f); e == nil {
for i, ls := range strings.Split(string(b), "\n") {
vs := kit.Split(ls, ": ")
m.Push(strings.TrimSpace(vs[0]), kit.FmtSize(kit.Int64(strings.TrimSpace(vs[1]))*1024))
if i > 1 {
break
}
}
}
}
m.Push("uptime", kit.Split(m.Cmdx(SYSTEM, "uptime"), ",")[0])
}}, }},
USERINFO: {Name: "userinfo", Help: "用户信息", Hand: func(m *ice.Message, arg ...string) { USERINFO: {Name: "userinfo", Help: "用户信息", Hand: func(m *ice.Message, arg ...string) {
m.Split(m.Cmdx(SYSTEM, "who"), "user term time", " ", "\n") m.Split(m.Cmdx(SYSTEM, "who"), "user term time", " ", "\n")

View File

@ -30,8 +30,8 @@ func _system_show(m *ice.Message, cmd *exec.Cmd) {
out := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS)) out := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS))
err := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS)) err := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS))
defer func() { defer func() {
m.Push(CMD_ERR, err.String())
m.Push(CMD_OUT, out.String()) m.Push(CMD_OUT, out.String())
m.Push(CMD_ERR, err.String())
m.Echo(kit.Select(out.String(), err.String())) m.Echo(kit.Select(out.String(), err.String()))
}() }()

View File

@ -10,7 +10,6 @@ const LEX = "lex"
var Index = &ice.Context{Name: LEX, Help: "词法模块", var Index = &ice.Context{Name: LEX, Help: "词法模块",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
return
m.Load() m.Load()
m.Richs(m.Prefix(MATRIX), "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(m.Prefix(MATRIX), "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
@ -23,7 +22,6 @@ var Index = &ice.Context{Name: LEX, Help: "词法模块",
}) })
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
return
m.Save() m.Save()
}}, }},
}, },

View File

@ -10,11 +10,6 @@ import (
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
type Seed struct {
page int
hash int
word string
}
type Point struct { type Point struct {
s int s int
c byte c byte
@ -33,7 +28,7 @@ type Matrix struct {
hash map[string]int hash map[string]int
word map[int]string word map[int]string
trans map[byte]string trans map[byte][]byte
state map[State]*State state map[State]*State
mat []map[byte]*State mat []map[byte]*State
} }
@ -45,9 +40,12 @@ func NewMatrix(m *ice.Message, nlang, ncell int) *Matrix {
mat.hash = map[string]int{} mat.hash = map[string]int{}
mat.word = map[int]string{} mat.word = map[int]string{}
mat.trans = map[byte]string{ mat.trans = map[byte][]byte{}
for k, v := range map[byte]string{
't': "\t", 'n': "\n", 'b': "\t ", 's': "\t \n", 't': "\t", 'n': "\n", 'b': "\t ", 's': "\t \n",
'd': "0123456789", 'x': "0123456789ABCDEFabcdef", 'd': "0123456789", 'x': "0123456789ABCDEFabcdef",
} {
mat.trans[k] = []byte(v)
} }
mat.state = make(map[State]*State) mat.state = make(map[State]*State)
@ -56,7 +54,7 @@ func NewMatrix(m *ice.Message, nlang, ncell int) *Matrix {
} }
func (mat *Matrix) char(c byte) []byte { func (mat *Matrix) char(c byte) []byte {
if cs, ok := mat.trans[c]; ok { if cs, ok := mat.trans[c]; ok {
return []byte(cs) return cs
} }
return []byte{c} return []byte{c}
} }
@ -254,7 +252,6 @@ func (mat *Matrix) Parse(m *ice.Message, npage string, line []byte) (hash int, w
pos := 0 pos := 0
for star, s := 0, page; s != 0 && pos < len(line); pos++ { for star, s := 0, page; s != 0 && pos < len(line); pos++ {
c := line[pos] c := line[pos]
if c == '\\' && pos < len(line)-1 { //跳过转义 if c == '\\' && pos < len(line)-1 { //跳过转义
pos++ pos++
@ -283,9 +280,7 @@ func (mat *Matrix) Parse(m *ice.Message, npage string, line []byte) (hash int, w
} }
} }
if pos == len(line) { if hash == 0 {
// hash, pos, word = -1, 0, word[:0]
} else if hash == 0 {
pos, word = 0, word[:0] pos, word = 0, word[:0]
} }
rest = line[pos:] rest = line[pos:]
@ -316,9 +311,9 @@ func (mat *Matrix) show(m *ice.Message) {
key := kit.Format("%c", j) key := kit.Format("%c", j)
if node := mat.mat[i][byte(j)]; node != nil { if node := mat.mat[i][byte(j)]; node != nil {
if node.hash == 0 { if node.hash == 0 {
m.Push(key, kit.Select(kit.Format("%02d", node.next), cli.ColorRed(m, mat.hand[node.next]))) m.Push(key, kit.Select(kit.Format("%02d", node.next), cli.ColorGreen(m, kit.Select(kit.Format("%d", node.next), mat.hand[node.next]))))
} else { } else {
m.Push(key, kit.Select(kit.Format("w%02d", node.hash), cli.ColorGreen(m, mat.word[node.hash]))) m.Push(key, kit.Select(kit.Format("w%02d", node.hash), cli.ColorRed(m, mat.word[node.hash])))
} }
} else { } else {
m.Push(key, "") m.Push(key, "")
@ -330,8 +325,8 @@ func (mat *Matrix) show(m *ice.Message) {
const ( const (
NLANG = "nlang" NLANG = "nlang"
NCELL = "ncell" NCELL = "ncell"
)
NSEED = "nseed" const (
NPAGE = "npage" NPAGE = "npage"
NHASH = "nhash" NHASH = "nhash"
) )
@ -351,7 +346,7 @@ func init() {
mdb.CREATE: {Name: "create nlang=32 ncell=256", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create nlang=32 ncell=256", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("256", m.Option(NCELL)))) mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("256", m.Option(NCELL))))
h := m.Rich(m.Prefix(MATRIX), "", kit.Data(kit.MDB_TIME, m.Time(), MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell)) h := m.Rich(m.Prefix(MATRIX), "", kit.Data(kit.MDB_TIME, m.Time(), MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell))
switch cb := m.Optionv("matrix.cb").(type) { switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
case func(string, *Matrix): case func(string, *Matrix):
cb(h, mat) cb(h, mat)
} }
@ -377,8 +372,7 @@ func init() {
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) { "show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) { m.Richs(m.Prefix(MATRIX), "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat, _ := value[MATRIX].(*Matrix) value[MATRIX].(*Matrix).show(m)
mat.show(m)
}) })
m.ProcessInner() m.ProcessInner()
}}, }},

View File

@ -73,13 +73,13 @@ import (
) )
func init() { func init() {
ice.Info.Build.Time = "%s" ice.Info.Make.Time = "%s"
ice.Info.Build.Hash = "%s" ice.Info.Make.Hash = "%s"
ice.Info.Build.Remote = "%s" ice.Info.Make.Remote = "%s"
ice.Info.Build.Branch = "%s" ice.Info.Make.Branch = "%s"
ice.Info.Build.Version = "%s" ice.Info.Make.Version = "%s"
ice.Info.Build.HostName = "%s" ice.Info.Make.HostName = "%s"
ice.Info.Build.UserName = "%s" ice.Info.Make.UserName = "%s"
} }
`, `,
m.Time(), m.Time(),

View File

@ -23,7 +23,7 @@ var Info = struct {
CtxShare string CtxShare string
CtxRiver string CtxRiver string
Build struct { Make struct {
Time string Time string
Hash string Hash string
Remote string Remote string

View File

@ -74,7 +74,7 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器",
}, },
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
VIM: {Name: "vim", Help: "编辑器", Value: kit.Data( VIM: {Name: "vim", Help: "编辑器", Value: kit.Data(
"source", "ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2", "source", "http://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2",
"build", []interface{}{ "build", []interface{}{
"--enable-multibyte=yes", "--enable-multibyte=yes",
"--enable-pythoninterp=yes", "--enable-pythoninterp=yes",