mirror of
https://shylinux.com/x/icebergs
synced 2025-06-26 10:27:31 +08:00
add some
This commit is contained in:
parent
0cc064db96
commit
5a1f38e7d9
@ -1,6 +1,7 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
@ -18,6 +19,8 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
if r, ok := m.Optionv(CMD_INPUT).(io.Reader); ok {
|
||||
cmd.Stdin = r
|
||||
}
|
||||
err := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS))
|
||||
cmd.Stderr = err
|
||||
if w := _system_out(m, CMD_OUTPUT); w != nil {
|
||||
cmd.Stdout, cmd.Stderr = w, w
|
||||
}
|
||||
@ -28,18 +31,20 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
ice.CMD, kit.Join(cmd.Args, lex.SP), DIR, cmd.Dir, ENV, kit.Select("", cmd.Env),
|
||||
m.OptionSimple(CMD_INPUT, CMD_OUTPUT, CMD_ERRPUT, mdb.CACHE_CLEAR_ONEXIT),
|
||||
)
|
||||
if e := cmd.Start(); m.Warn(e, ice.ErrNotStart, cmd.Args) {
|
||||
if e := cmd.Start(); m.Warn(e, ice.ErrNotStart, cmd.Args, err.String()) {
|
||||
m.Debug("what %v", e)
|
||||
mdb.HashModify(m, h, STATUS, ERROR, ERROR, e)
|
||||
return
|
||||
}
|
||||
mdb.HashSelectUpdate(m, h, func(value ice.Map) { value[PID] = cmd.Process.Pid })
|
||||
m.Echo("%d", cmd.Process.Pid)
|
||||
m.Go(func() {
|
||||
if e := cmd.Wait(); !m.Warn(e, ice.ErrNotStart, cmd.Args) && cmd.ProcessState != nil && cmd.ProcessState.Success() {
|
||||
if e := cmd.Wait(); !m.Warn(e, ice.ErrNotStart, cmd.Args, err.String()) && cmd.ProcessState != nil && cmd.ProcessState.Success() {
|
||||
mdb.HashModify(m, mdb.HASH, h, STATUS, STOP)
|
||||
m.Cost(CODE, "0", ctx.ARGS, cmd.Args)
|
||||
} else {
|
||||
mdb.HashSelectUpdate(m, h, func(value ice.Map) { kit.If(value[STATUS] == START, func() { value[STATUS], value[ERROR] = ERROR, e }) })
|
||||
mdb.HashSelectUpdate(m, h, func(value ice.Map) { value[STATUS], value[ERROR] = ERROR, e })
|
||||
m.Debug("what %v", e)
|
||||
}
|
||||
switch status := mdb.HashSelectField(m.Sleep300ms(), h, STATUS); cb := m.OptionCB("").(type) {
|
||||
case func(string) bool:
|
||||
|
@ -172,7 +172,9 @@ func HashKey(m *ice.Message) string {
|
||||
func HashShort(m *ice.Message) string {
|
||||
return kit.Select(HASH, Config(m, SHORT), Config(m, SHORT) != UNIQ)
|
||||
}
|
||||
func HashField(m *ice.Message) string { return kit.Select(HASH_FIELD, Config(m, FIELD)) }
|
||||
func HashField(m *ice.Message) string {
|
||||
return kit.Select(HASH_FIELD, Config(m, FIELD), Config(m, FIELDS))
|
||||
}
|
||||
func HashInputs(m *ice.Message, arg ...Any) *ice.Message {
|
||||
return m.Cmdy(INPUTS, m.PrefixKey(), "", HASH, arg)
|
||||
}
|
||||
|
@ -10,6 +10,6 @@ const NFS = "nfs"
|
||||
var Index = &ice.Context{Name: NFS, Help: "存储模块"}
|
||||
|
||||
func init() {
|
||||
ice.Index.Register(Index, nil, TAR, CAT, DIR, PACK, DEFS, SAVE, PUSH, COPY, LINK, GREP, TRASH)
|
||||
ice.Index.Register(Index, nil, ZIP, TAR, CAT, DIR, PACK, DEFS, SAVE, PUSH, COPY, LINK, GREP, TRASH)
|
||||
}
|
||||
func Prefix(arg ...string) string { return kit.Keys(NFS, arg) }
|
||||
|
@ -2,7 +2,6 @@ package nfs
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"archive/zip"
|
||||
"compress/gzip"
|
||||
"io"
|
||||
"os"
|
||||
@ -14,23 +13,12 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func _zip_list(m *ice.Message, p string, cb func(zip.FileHeader, io.Reader, int)) {
|
||||
if f, e := zip.OpenReader(p); m.Warn(e, ice.ErrNotValid, p) {
|
||||
return
|
||||
} else {
|
||||
defer f.Close()
|
||||
for i, f := range f.File {
|
||||
if r, e := f.Open(); e == nil {
|
||||
defer r.Close()
|
||||
cb(f.FileHeader, r, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
func _tar_list(m *ice.Message, p string, cb func(*tar.Header, io.Reader, int)) {
|
||||
Open(m, p, func(r io.Reader) {
|
||||
for {
|
||||
switch kit.Ext(p) {
|
||||
case "tgz":
|
||||
p = kit.Keys(kit.TrimExt(p, kit.Ext(p)), TAR, GZ)
|
||||
case GZ:
|
||||
if f, e := gzip.NewReader(r); m.Warn(e, ice.ErrNotValid, p) {
|
||||
return
|
||||
@ -61,8 +49,7 @@ func _tar_list(m *ice.Message, p string, cb func(*tar.Header, io.Reader, int)) {
|
||||
}
|
||||
|
||||
const (
|
||||
GZ = "gz"
|
||||
ZIP = "zip"
|
||||
GZ = "gz"
|
||||
)
|
||||
const TAR = "tar"
|
||||
|
||||
@ -72,23 +59,11 @@ func init() {
|
||||
mdb.NEXT: {Hand: func(m *ice.Message, arg ...string) { mdb.PrevPage(m, arg[0], kit.Slice(arg, 1)...) }},
|
||||
mdb.PREV: {Hand: func(m *ice.Message, arg ...string) { mdb.NextPageLimit(m, arg[0], kit.Slice(arg, 1)...) }},
|
||||
mdb.EXPORT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
list, size := kit.Dict(), 0
|
||||
if kit.Ext(m.Option(PATH)) == ZIP {
|
||||
_zip_list(m, m.Option(PATH), func(h zip.FileHeader, r io.Reader, i int) {
|
||||
p := path.Join(path.Dir(m.Option(PATH)), kit.Split(path.Base(m.Option(PATH)), "-.")[0], h.Name)
|
||||
if strings.HasSuffix(h.Name, PS) {
|
||||
MkdirAll(m, p)
|
||||
return
|
||||
}
|
||||
kit.IfNoKey(list, path.Dir(p), func(p string) { MkdirAll(m, p) })
|
||||
Create(m, p, func(w io.Writer) {
|
||||
os.Chmod(p, os.FileMode(h.Mode()))
|
||||
Copy(m, w, r, func(n int) { size += n })
|
||||
kit.If(m.Option(FILE), func() { m.Cmdy(DIR, p).Cmdy(CAT, p) })
|
||||
})
|
||||
})
|
||||
m.Cmdy(ZIP, mdb.EXPORT, arg)
|
||||
return
|
||||
}
|
||||
list, size := kit.Dict(), 0
|
||||
_tar_list(m, m.Option(PATH), func(h *tar.Header, r io.Reader, i int) {
|
||||
if h.Name == m.Option(FILE) || m.Option(FILE) == "" {
|
||||
p := path.Join(path.Dir(m.Option(PATH)), h.Name)
|
||||
@ -110,6 +85,13 @@ func init() {
|
||||
m.Cmdy(DIR, arg)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
m.Debug("waht %v", m.FormatMeta())
|
||||
}()
|
||||
if kit.Ext(arg[0]) == ZIP {
|
||||
m.Cmdy(ZIP, arg)
|
||||
return
|
||||
}
|
||||
page, size := mdb.OptionPages(m, kit.Slice(arg, 2)...)
|
||||
_tar_list(m, arg[0], func(h *tar.Header, r io.Reader, i int) {
|
||||
if len(kit.Slice(arg, 0, 2)) > 1 {
|
||||
|
72
base/nfs/zip.go
Normal file
72
base/nfs/zip.go
Normal file
@ -0,0 +1,72 @@
|
||||
package nfs
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"io"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func _zip_list(m *ice.Message, p string, cb func(zip.FileHeader, io.Reader, int)) {
|
||||
if f, e := zip.OpenReader(p); m.Warn(e, ice.ErrNotValid, p) {
|
||||
return
|
||||
} else {
|
||||
defer f.Close()
|
||||
for i, f := range f.File {
|
||||
if r, e := f.Open(); e == nil {
|
||||
defer r.Close()
|
||||
cb(f.FileHeader, r, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const ZIP = "zip"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
ZIP: {Name: "zip path file auto page", Help: "打包", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.NEXT: {Hand: func(m *ice.Message, arg ...string) { mdb.PrevPage(m, arg[0], kit.Slice(arg, 1)...) }},
|
||||
mdb.PREV: {Hand: func(m *ice.Message, arg ...string) { mdb.NextPageLimit(m, arg[0], kit.Slice(arg, 1)...) }},
|
||||
mdb.EXPORT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
list, size := kit.Dict(), 0
|
||||
_zip_list(m, m.Option(PATH), func(h zip.FileHeader, r io.Reader, i int) {
|
||||
p := path.Join(path.Dir(m.Option(PATH)), kit.Split(path.Base(m.Option(PATH)), "_-.")[0], h.Name)
|
||||
if strings.HasSuffix(h.Name, PS) {
|
||||
MkdirAll(m, p)
|
||||
return
|
||||
}
|
||||
kit.IfNoKey(list, path.Dir(p), func(p string) { MkdirAll(m, p) })
|
||||
Create(m, p, func(w io.Writer) {
|
||||
os.Chmod(p, os.FileMode(h.Mode()))
|
||||
Copy(m, w, r, func(n int) { size += n })
|
||||
kit.If(m.Option(FILE), func() { m.Cmdy(DIR, p).Cmdy(CAT, p) })
|
||||
})
|
||||
})
|
||||
}},
|
||||
}, mdb.PageListAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) == 0 || strings.HasSuffix(arg[0], PS) {
|
||||
m.Cmdy(DIR, arg)
|
||||
return
|
||||
}
|
||||
page, size := mdb.OptionPages(m, kit.Slice(arg, 2)...)
|
||||
_zip_list(m, arg[0], func(h zip.FileHeader, r io.Reader, i int) {
|
||||
if len(kit.Slice(arg, 0, 2)) > 1 {
|
||||
if h.Name != arg[1] {
|
||||
return
|
||||
}
|
||||
m.Echo(string(ReadAll(m, r)[:]))
|
||||
}
|
||||
if i >= (page-1)*size && i < page*size {
|
||||
m.Push(mdb.TIME, h.ModTime().Format(ice.MOD_TIME)).Push(FILE, h.Name).Push(SIZE, kit.FmtSize(int64(h.UncompressedSize)))
|
||||
}
|
||||
})
|
||||
m.PushAction(mdb.EXPORT)
|
||||
}},
|
||||
})
|
||||
}
|
@ -53,7 +53,7 @@ func _spide_show(m *ice.Message, name string, arg ...string) {
|
||||
return
|
||||
}
|
||||
defer res.Body.Close()
|
||||
m.Cost(cli.STATUS, res.Status, nfs.SIZE, res.Header.Get(ContentLength), mdb.TYPE, res.Header.Get(ContentType))
|
||||
m.Cost(cli.STATUS, res.Status, nfs.SIZE, kit.FmtSize(kit.Int64(res.Header.Get(ContentLength))), mdb.TYPE, res.Header.Get(ContentType))
|
||||
kit.For(res.Header, func(k string, v []string) { m.Logs("response", k, v) })
|
||||
mdb.HashSelectUpdate(m, name, func(value ice.Map) {
|
||||
kit.For(res.Cookies(), func(v *http.Cookie) {
|
||||
|
@ -116,7 +116,7 @@ func _install_start(m *ice.Message, arg ...string) {
|
||||
m.ErrorNotImplement(cb)
|
||||
return
|
||||
}
|
||||
m.Cmdy(cli.DAEMON, kit.Select(path.Join(ice.BIN, kit.Split(path.Base(arg[0]), "-.")[0]), arg, 1), kit.Slice(arg, 2), args)
|
||||
m.Cmdy(cli.DAEMON, kit.Select(path.Join(ice.BIN, path.Base(_install_path(m, ""))), arg, 1), kit.Slice(arg, 2), args)
|
||||
}
|
||||
func _install_stop(m *ice.Message, arg ...string) {
|
||||
m.Cmd(cli.DAEMON, func(value ice.Maps) {
|
||||
@ -138,10 +138,10 @@ func _install_trash(m *ice.Message, arg ...string) {
|
||||
}
|
||||
}
|
||||
func _install_service(m *ice.Message, arg ...string) {
|
||||
arg = kit.Split(path.Base(arg[0]), "_-.")[:1]
|
||||
name := kit.Split(path.Base(arg[0]), "_-.")[0]
|
||||
m.Fields(len(arg[1:]), "time,port,status,pid,cmd,dir")
|
||||
m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH, func(value ice.Maps) {
|
||||
if strings.Contains(value[ice.CMD], path.Join(ice.BIN, arg[0])) {
|
||||
if strings.Contains(value[ice.CMD], path.Join(ice.BIN, name)) {
|
||||
switch m.Push("", value, kit.Split(m.OptionFields())); value[mdb.STATUS] {
|
||||
case cli.START:
|
||||
m.PushButton(gdb.DEBUG, cli.STOP)
|
||||
|
Loading…
x
Reference in New Issue
Block a user