feat: console add task tree ui
@@ -4,9 +4,11 @@ import (
|
||||
"context"
|
||||
"m7s.live/m7s/v5"
|
||||
_ "m7s.live/m7s/v5/plugin/cascade"
|
||||
_ "m7s.live/m7s/v5/plugin/console"
|
||||
_ "m7s.live/m7s/v5/plugin/debug"
|
||||
_ "m7s.live/m7s/v5/plugin/flv"
|
||||
_ "m7s.live/m7s/v5/plugin/logrotate"
|
||||
_ "m7s.live/m7s/v5/plugin/monitor"
|
||||
_ "m7s.live/m7s/v5/plugin/rtmp"
|
||||
_ "m7s.live/m7s/v5/plugin/rtsp"
|
||||
_ "m7s.live/m7s/v5/plugin/stress"
|
||||
|
||||
@@ -4,11 +4,8 @@ package db
|
||||
|
||||
import (
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Factory["sqlite"] = func(dsn string) gorm.Dialector {
|
||||
return sqlite.Open(dsn)
|
||||
}
|
||||
Factory["sqlite"] = sqlite.Open
|
||||
}
|
||||
|
||||
@@ -8,10 +8,14 @@ type ChannelTask struct {
|
||||
callback reflect.Value
|
||||
}
|
||||
|
||||
func (t *ChannelTask) GetTaskType() string {
|
||||
func (*ChannelTask) GetTaskType() string {
|
||||
return "channel"
|
||||
}
|
||||
|
||||
func (*ChannelTask) GetTaskTypeID() byte {
|
||||
return 3
|
||||
}
|
||||
|
||||
func (t *ChannelTask) getSignal() reflect.Value {
|
||||
return t.channel
|
||||
}
|
||||
|
||||
@@ -35,23 +35,31 @@ func (m *MarcoLongTask) initTask(ctx context.Context, task ITask) {
|
||||
m.keepAlive = true
|
||||
}
|
||||
|
||||
func (m *MarcoLongTask) GetTaskType() string {
|
||||
func (*MarcoLongTask) GetTaskType() string {
|
||||
return "long"
|
||||
}
|
||||
func (*MarcoLongTask) GetTaskTypeID() byte {
|
||||
return 2
|
||||
}
|
||||
|
||||
// MarcoTask include sub tasks
|
||||
type MarcoTask struct {
|
||||
Task
|
||||
addSub chan ITask
|
||||
children []ITask
|
||||
lazyRun sync.Once
|
||||
keepAlive bool
|
||||
addSub chan ITask
|
||||
children []ITask
|
||||
lazyRun sync.Once
|
||||
keepAlive bool
|
||||
addListeners []func(task ITask)
|
||||
}
|
||||
|
||||
func (m *MarcoTask) GetTaskType() string {
|
||||
func (*MarcoTask) GetTaskType() string {
|
||||
return "marco"
|
||||
}
|
||||
|
||||
func (*MarcoTask) GetTaskTypeID() byte {
|
||||
return 1
|
||||
}
|
||||
|
||||
func (mt *MarcoTask) getMaroTask() *MarcoTask {
|
||||
return mt
|
||||
}
|
||||
@@ -116,6 +124,10 @@ func (mt *MarcoTask) AddTask(task ITask) *Task {
|
||||
return mt.AddTaskWithContext(mt.Context, task)
|
||||
}
|
||||
|
||||
func (mt *MarcoTask) OnTaskAdded(f func(ITask)) {
|
||||
mt.addListeners = append(mt.addListeners, f)
|
||||
}
|
||||
|
||||
func (mt *MarcoTask) AddTaskWithContext(ctx context.Context, t ITask) (task *Task) {
|
||||
if ctx == nil && mt.Context == nil {
|
||||
panic("context is nil")
|
||||
@@ -154,6 +166,18 @@ func (mt *MarcoTask) AddChan(channel any, callback any) *ChannelTask {
|
||||
return &chanTask
|
||||
}
|
||||
|
||||
func (mt *MarcoTask) addChild(task ITask) int {
|
||||
mt.children = append(mt.children, task)
|
||||
for _, listener := range mt.addListeners {
|
||||
listener(task)
|
||||
}
|
||||
return len(mt.children) - 1
|
||||
}
|
||||
|
||||
func (mt *MarcoTask) removeChild(index int) {
|
||||
mt.children = slices.Delete(mt.children, index, index+1)
|
||||
}
|
||||
|
||||
func (mt *MarcoTask) run() {
|
||||
cases := []reflect.SelectCase{{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(mt.addSub)}}
|
||||
defer func() {
|
||||
@@ -178,10 +202,11 @@ func (mt *MarcoTask) run() {
|
||||
return
|
||||
}
|
||||
if task := rev.Interface().(ITask); task.getParent() == mt {
|
||||
index := mt.addChild(task)
|
||||
if err := task.start(); err == nil {
|
||||
mt.children = append(mt.children, task)
|
||||
cases = append(cases, reflect.SelectCase{Dir: reflect.SelectRecv, Chan: task.getSignal()})
|
||||
} else {
|
||||
mt.removeChild(index)
|
||||
task.Stop(err)
|
||||
}
|
||||
}
|
||||
@@ -192,7 +217,7 @@ func (mt *MarcoTask) run() {
|
||||
if task.getParent() == mt {
|
||||
task.dispose()
|
||||
}
|
||||
mt.children = slices.Delete(mt.children, taskIndex, taskIndex+1)
|
||||
mt.removeChild(taskIndex)
|
||||
cases = slices.Delete(cases, chosen, chosen+1)
|
||||
|
||||
} else if c, ok := task.(IChannelTask); ok {
|
||||
|
||||
@@ -32,11 +32,15 @@ type (
|
||||
dispose()
|
||||
IsStopped() bool
|
||||
GetTaskType() string
|
||||
GetTaskTypeID() byte
|
||||
GetOwnerType() string
|
||||
SetRetry(maxRetry int, retryInterval time.Duration)
|
||||
OnStart(func())
|
||||
OnDispose(func())
|
||||
}
|
||||
IMarcoTask interface {
|
||||
RangeSubTask(func(yield ITask) bool)
|
||||
OnTaskAdded(func(ITask))
|
||||
}
|
||||
IChannelTask interface {
|
||||
tick(reflect.Value)
|
||||
@@ -86,10 +90,14 @@ func (task *Task) GetOwnerType() string {
|
||||
return reflect.TypeOf(task.handler).Elem().Name()
|
||||
}
|
||||
|
||||
func (task *Task) GetTaskType() string {
|
||||
func (*Task) GetTaskType() string {
|
||||
return "base"
|
||||
}
|
||||
|
||||
func (*Task) GetTaskTypeID() byte {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (task *Task) GetTask() *Task {
|
||||
return task
|
||||
}
|
||||
|
||||
@@ -39,10 +39,7 @@ func (c *CascadeServerPlugin) OnQUICConnect(conn quic.Connection) {
|
||||
err = c.DB.AutoMigrate(child)
|
||||
tx := c.DB.First(child, "secret = ?", secret)
|
||||
if tx.Error == nil {
|
||||
var ok bool
|
||||
if child, ok = cascade.SubordinateMap.Get(child.ID); ok {
|
||||
cascade.SubordinateMap.Set(child)
|
||||
}
|
||||
cascade.SubordinateMap.Set(child)
|
||||
} else if c.AutoRegister {
|
||||
child.Secret = secret
|
||||
child.IP = remoteAddr
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"bufio"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/quic-go/quic-go"
|
||||
@@ -12,6 +13,7 @@ import (
|
||||
"m7s.live/m7s/v5/pkg/util"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@@ -189,3 +191,24 @@ func (cfg *ConsolePlugin) OnInit() error {
|
||||
cfg.AddTask(&connectTask)
|
||||
return nil
|
||||
}
|
||||
|
||||
//go:embed web/*
|
||||
var uiFiles embed.FS
|
||||
var fileServer = http.FileServer(http.FS(uiFiles))
|
||||
|
||||
func (cfg *ConsolePlugin) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
embedPath := "/web" + r.URL.Path
|
||||
if r.URL.Path == "/" {
|
||||
r.URL.Path = "/web/index.html"
|
||||
} else {
|
||||
r.URL.Path = "/web" + r.URL.Path
|
||||
}
|
||||
file, err := os.Open("./" + r.URL.Path)
|
||||
if err == nil {
|
||||
defer file.Close()
|
||||
http.ServeContent(w, r, r.URL.Path, time.Now(), file)
|
||||
return
|
||||
}
|
||||
r.URL.Path = embedPath
|
||||
fileServer.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
115
plugin/console/web/assets/404-54dd6499.svg
Normal file
@@ -0,0 +1,115 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 456.01 262.12">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1,.cls-2,.cls-24,.cls-25,.cls-3,.cls-4,.cls-5,.cls-6{fill:none;stroke-miterlimit:10;}.cls-1,.cls-2,.cls-3,.cls-4,.cls-5,.cls-6{stroke-width:2px;}.cls-1{stroke:url(#未命名的渐变_26);}.cls-2{stroke:url(#未命名的渐变_26-2);}.cls-3{stroke:url(#未命名的渐变_26-3);}.cls-4{stroke:url(#未命名的渐变_26-4);}.cls-5{stroke:url(#未命名的渐变_26-5);}.cls-6{stroke:url(#未命名的渐变_26-6);}.cls-10,.cls-11,.cls-12,.cls-7,.cls-9{opacity:0.4;}.cls-7{fill:url(#未命名的渐变_26-7);}.cls-8{opacity:0.7;}.cls-9{fill:url(#未命名的渐变_26-8);}.cls-10{fill:url(#未命名的渐变_26-9);}.cls-11{fill:url(#未命名的渐变_26-10);}.cls-12{fill:url(#未命名的渐变_26-11);}.cls-13{fill:#67c8ff;}.cls-14{fill:#8cd7ff;}.cls-15{fill:#b0e7ff;}.cls-16{fill:#728cb9;}.cls-17{fill:#7798b9;}.cls-18{fill:#a4c0d9;}.cls-19{fill:#ebfcff;}.cls-20{fill:#ffb056;}.cls-21{fill:#257fba;}.cls-22{fill:#398eed;}.cls-23{fill:#ffeed2;}.cls-24{stroke:#e49056;stroke-width:0.26px;}.cls-25{stroke:#4986d9;stroke-width:0.1px;}.cls-26{fill:#e55c5c;opacity:0.2;}
|
||||
</style>
|
||||
<linearGradient id="未命名的渐变_26" x1="1" y1="91.35" x2="1" y2="181.12" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#81cfff"/>
|
||||
<stop offset="1" stop-color="#5ecfff" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="未命名的渐变_26-2" x1="455.01" y1="72.11" x2="455.01" y2="161.88" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-3" x1="40.9" y1="143.88" x2="40.9" y2="199.51" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-4" x1="64.97" y1="95.36" x2="64.97" y2="123.17" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-5" x1="397.23" y1="104.2" x2="397.23" y2="132.02" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-6" x1="424.75" y1="133.49" x2="424.75" y2="189.13" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-7" x1="232.75" y1="224.43" x2="232.75" y2="262.12" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-8" x1="349.36" y1="26.68" x2="349.36" y2="204.03" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-9" x1="201.45" y1="55.61" x2="201.45" y2="204.03" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-10" x1="122.98" y1="26.68" x2="122.98" y2="204.03" xlink:href="#未命名的渐变_26"/>
|
||||
<linearGradient id="未命名的渐变_26-11" x1="273.51" y1="0" x2="273.51" y2="209.54" xlink:href="#未命名的渐变_26"/>
|
||||
</defs>
|
||||
<title>404</title>
|
||||
<g id="图层_2" data-name="图层 2">
|
||||
<g id="图层_1-2" data-name="图层 1">
|
||||
<line class="cls-1" x1="1" y1="91.35" x2="1" y2="181.12"/>
|
||||
<line class="cls-2" x1="455.01" y1="72.11" x2="455.01" y2="161.88"/>
|
||||
<line class="cls-3" x1="40.9" y1="143.88" x2="40.9" y2="199.51"/>
|
||||
<line class="cls-4" x1="64.97" y1="95.36" x2="64.97" y2="123.17"/>
|
||||
<line class="cls-5" x1="397.23" y1="104.2" x2="397.23" y2="132.02"/>
|
||||
<line class="cls-6" x1="424.75" y1="133.49" x2="424.75" y2="189.13"/>
|
||||
<path class="cls-7" d="M412.28,262.12c-23-23-61-37.69-179.53-37.69S76.24,239.1,53.21,262.12Z"/>
|
||||
<g class="cls-8">
|
||||
<path class="cls-9"
|
||||
d="M380.66,26.68H318.07a2.71,2.71,0,0,0-2.82,2.59V201.44a2.71,2.71,0,0,0,2.82,2.59h62.59a2.72,2.72,0,0,0,2.82-2.59V29.27A2.72,2.72,0,0,0,380.66,26.68ZM328.3,147a.9.9,0,0,1-.95.87h-3.6a.9.9,0,0,1-.95-.87V127.27a.91.91,0,0,1,.95-.87h3.6a.91.91,0,0,1,.95.87Zm0-30.23a.91.91,0,0,1-.95.87h-3.6a.91.91,0,0,1-.95-.87V97a.91.91,0,0,1,.95-.87h3.6a.91.91,0,0,1,.95.87Zm0-30.24a.91.91,0,0,1-.95.87h-3.6a.91.91,0,0,1-.95-.87V66.8a.91.91,0,0,1,.95-.87h3.6a.91.91,0,0,1,.95.87Zm0-30.24a.91.91,0,0,1-.95.87h-3.6a.91.91,0,0,1-.95-.87V36.56a.91.91,0,0,1,.95-.87h3.6a.91.91,0,0,1,.95.87ZM340,147a.9.9,0,0,1-.94.87h-3.61a.91.91,0,0,1-.95-.87V127.27a.92.92,0,0,1,.95-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.23a.91.91,0,0,1-.94.87h-3.61a.92.92,0,0,1-.95-.87V97a.92.92,0,0,1,.95-.87h3.61A.91.91,0,0,1,340,97Zm0-30.24a.91.91,0,0,1-.94.87h-3.61a.92.92,0,0,1-.95-.87V66.8a.92.92,0,0,1,.95-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.24a.91.91,0,0,1-.94.87h-3.61a.92.92,0,0,1-.95-.87V36.56a.92.92,0,0,1,.95-.87h3.61a.91.91,0,0,1,.94.87ZM351.7,147a.9.9,0,0,1-.94.87h-3.61a.9.9,0,0,1-.94-.87V127.27a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.23a.91.91,0,0,1-.94.87h-3.61a.91.91,0,0,1-.94-.87V97a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.24a.91.91,0,0,1-.94.87h-3.61a.91.91,0,0,1-.94-.87V66.8a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.24a.91.91,0,0,1-.94.87h-3.61a.91.91,0,0,1-.94-.87V36.56a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87ZM363.4,147a.9.9,0,0,1-.94.87h-3.61a.9.9,0,0,1-.94-.87V127.27a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.23a.91.91,0,0,1-.94.87h-3.61a.91.91,0,0,1-.94-.87V97a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.24a.91.91,0,0,1-.94.87h-3.61a.91.91,0,0,1-.94-.87V66.8a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87Zm0-30.24a.91.91,0,0,1-.94.87h-3.61a.91.91,0,0,1-.94-.87V36.56a.91.91,0,0,1,.94-.87h3.61a.91.91,0,0,1,.94.87ZM375.11,147a.91.91,0,0,1-.95.87h-3.61a.9.9,0,0,1-.94-.87V127.27a.91.91,0,0,1,.94-.87h3.61a.92.92,0,0,1,.95.87Zm0-30.23a.92.92,0,0,1-.95.87h-3.61a.91.91,0,0,1-.94-.87V97a.91.91,0,0,1,.94-.87h3.61a.92.92,0,0,1,.95.87Zm0-30.24a.92.92,0,0,1-.95.87h-3.61a.91.91,0,0,1-.94-.87V66.8a.91.91,0,0,1,.94-.87h3.61a.92.92,0,0,1,.95.87Zm0-30.24a.92.92,0,0,1-.95.87h-3.61a.91.91,0,0,1-.94-.87V36.56a.91.91,0,0,1,.94-.87h3.61a.92.92,0,0,1,.95.87Z"/>
|
||||
<path class="cls-10"
|
||||
d="M231.1,55.61H171.8A2.71,2.71,0,0,0,169,58.2V201.44A2.71,2.71,0,0,0,171.8,204h59.3a2.71,2.71,0,0,0,2.82-2.59V58.2A2.71,2.71,0,0,0,231.1,55.61ZM182.47,159.37a1.16,1.16,0,0,1-1.2,1.11h-5.4a1.16,1.16,0,0,1-1.2-1.11v-5.22a1.15,1.15,0,0,1,1.2-1.1h5.4a1.15,1.15,0,0,1,1.2,1.1Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1h-5.4a1.15,1.15,0,0,1-1.2-1.1v-5.22a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11h-5.4a1.16,1.16,0,0,1-1.2-1.11v-5.22a1.15,1.15,0,0,1,1.2-1.1h5.4a1.15,1.15,0,0,1,1.2,1.1Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1h-5.4a1.15,1.15,0,0,1-1.2-1.1V115.5a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11h-5.4a1.16,1.16,0,0,1-1.2-1.11v-5.21a1.15,1.15,0,0,1,1.2-1.11h5.4a1.15,1.15,0,0,1,1.2,1.11Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1h-5.4a1.15,1.15,0,0,1-1.2-1.1V89.73a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11h-5.4a1.16,1.16,0,0,1-1.2-1.11V76.85a1.15,1.15,0,0,1,1.2-1.11h5.4a1.15,1.15,0,0,1,1.2,1.11Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1h-5.4a1.15,1.15,0,0,1-1.2-1.1V64a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.2,1.11Zm10.08,90.19a1.16,1.16,0,0,1-1.2,1.11H186a1.16,1.16,0,0,1-1.21-1.11v-5.22a1.16,1.16,0,0,1,1.21-1.1h5.4a1.15,1.15,0,0,1,1.2,1.1Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H186a1.16,1.16,0,0,1-1.21-1.1v-5.22a1.16,1.16,0,0,1,1.21-1.11h5.4a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11H186a1.16,1.16,0,0,1-1.21-1.11v-5.22a1.16,1.16,0,0,1,1.21-1.1h5.4a1.15,1.15,0,0,1,1.2,1.1Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H186a1.16,1.16,0,0,1-1.21-1.1V115.5a1.16,1.16,0,0,1,1.21-1.11h5.4a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11H186a1.16,1.16,0,0,1-1.21-1.11v-5.21a1.16,1.16,0,0,1,1.21-1.11h5.4a1.15,1.15,0,0,1,1.2,1.11Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H186a1.16,1.16,0,0,1-1.21-1.1V89.73A1.16,1.16,0,0,1,186,88.62h5.4a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11H186a1.16,1.16,0,0,1-1.21-1.11V76.85A1.16,1.16,0,0,1,186,75.74h5.4a1.15,1.15,0,0,1,1.2,1.11Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H186a1.16,1.16,0,0,1-1.21-1.1V64A1.16,1.16,0,0,1,186,62.85h5.4a1.16,1.16,0,0,1,1.2,1.11Zm10.08,90.19a1.16,1.16,0,0,1-1.21,1.11H196a1.16,1.16,0,0,1-1.2-1.11v-5.22a1.15,1.15,0,0,1,1.2-1.1h5.4a1.16,1.16,0,0,1,1.21,1.1Zm0-12.88a1.16,1.16,0,0,1-1.21,1.1H196a1.15,1.15,0,0,1-1.2-1.1v-5.22a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.21,1.11Zm0-12.89a1.16,1.16,0,0,1-1.21,1.11H196a1.16,1.16,0,0,1-1.2-1.11v-5.22a1.15,1.15,0,0,1,1.2-1.1h5.4a1.16,1.16,0,0,1,1.21,1.1Zm0-12.88a1.16,1.16,0,0,1-1.21,1.1H196a1.15,1.15,0,0,1-1.2-1.1V115.5a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.21,1.11Zm0-12.89a1.16,1.16,0,0,1-1.21,1.11H196a1.16,1.16,0,0,1-1.2-1.11v-5.21a1.15,1.15,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.21,1.11Zm0-12.88a1.16,1.16,0,0,1-1.21,1.1H196a1.15,1.15,0,0,1-1.2-1.1V89.73a1.16,1.16,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.21,1.11Zm0-12.89a1.16,1.16,0,0,1-1.21,1.11H196a1.16,1.16,0,0,1-1.2-1.11V76.85a1.15,1.15,0,0,1,1.2-1.11h5.4a1.16,1.16,0,0,1,1.21,1.11Zm0-12.88a1.16,1.16,0,0,1-1.21,1.1H196a1.15,1.15,0,0,1-1.2-1.1V64a1.16,1.16,0,0,1,1.2-1.11h5.4A1.16,1.16,0,0,1,202.63,64Zm25.21,90.19a1.16,1.16,0,0,1-1.2,1.11H206.1a1.16,1.16,0,0,1-1.2-1.11v-5.22a1.15,1.15,0,0,1,1.2-1.1h20.54a1.15,1.15,0,0,1,1.2,1.1Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H206.1a1.15,1.15,0,0,1-1.2-1.1v-5.22a1.16,1.16,0,0,1,1.2-1.11h20.54a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11H206.1a1.16,1.16,0,0,1-1.2-1.11v-5.22a1.15,1.15,0,0,1,1.2-1.1h20.54a1.15,1.15,0,0,1,1.2,1.1Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H206.1a1.15,1.15,0,0,1-1.2-1.1V115.5a1.16,1.16,0,0,1,1.2-1.11h20.54a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11H206.1a1.16,1.16,0,0,1-1.2-1.11v-5.21a1.15,1.15,0,0,1,1.2-1.11h20.54a1.15,1.15,0,0,1,1.2,1.11Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H206.1a1.15,1.15,0,0,1-1.2-1.1V89.73a1.16,1.16,0,0,1,1.2-1.11h20.54a1.16,1.16,0,0,1,1.2,1.11Zm0-12.89a1.16,1.16,0,0,1-1.2,1.11H206.1a1.16,1.16,0,0,1-1.2-1.11V76.85a1.15,1.15,0,0,1,1.2-1.11h20.54a1.15,1.15,0,0,1,1.2,1.11Zm0-12.88a1.15,1.15,0,0,1-1.2,1.1H206.1a1.15,1.15,0,0,1-1.2-1.1V64a1.16,1.16,0,0,1,1.2-1.11h20.54a1.16,1.16,0,0,1,1.2,1.11Z"/>
|
||||
<path class="cls-11"
|
||||
d="M161.13,26.68H84.83A2.71,2.71,0,0,0,82,29.27V201.44A2.71,2.71,0,0,0,84.83,204h76.3a2.71,2.71,0,0,0,2.82-2.59V29.27A2.71,2.71,0,0,0,161.13,26.68ZM154.34,161a1.16,1.16,0,0,1-1.2,1.11H92.83A1.16,1.16,0,0,1,91.62,161v-5.21a1.16,1.16,0,0,1,1.21-1.11h60.31a1.15,1.15,0,0,1,1.2,1.11Zm0-14.67a1.15,1.15,0,0,1-1.2,1.1H92.83a1.16,1.16,0,0,1-1.21-1.1v-5.22A1.16,1.16,0,0,1,92.83,140h60.31a1.16,1.16,0,0,1,1.2,1.11Zm0-14.68a1.16,1.16,0,0,1-1.2,1.11H92.83a1.16,1.16,0,0,1-1.21-1.11v-5.22a1.16,1.16,0,0,1,1.21-1.1h60.31a1.15,1.15,0,0,1,1.2,1.1Zm0-14.68a1.16,1.16,0,0,1-1.2,1.11H92.83a1.16,1.16,0,0,1-1.21-1.11v-5.21a1.16,1.16,0,0,1,1.21-1.11h60.31a1.15,1.15,0,0,1,1.2,1.11Zm0-14.67a1.15,1.15,0,0,1-1.2,1.1H92.83a1.16,1.16,0,0,1-1.21-1.1V97a1.16,1.16,0,0,1,1.21-1.11h60.31a1.16,1.16,0,0,1,1.2,1.11Zm0-14.68a1.16,1.16,0,0,1-1.2,1.11H92.83a1.16,1.16,0,0,1-1.21-1.11V82.35a1.16,1.16,0,0,1,1.21-1.1h60.31a1.15,1.15,0,0,1,1.2,1.1Zm0-14.68a1.16,1.16,0,0,1-1.2,1.11H92.83a1.16,1.16,0,0,1-1.21-1.11V67.68a1.16,1.16,0,0,1,1.21-1.11h60.31a1.15,1.15,0,0,1,1.2,1.11Zm0-14.67a1.15,1.15,0,0,1-1.2,1.1H92.83a1.16,1.16,0,0,1-1.21-1.1V53a1.16,1.16,0,0,1,1.21-1.11h60.31a1.16,1.16,0,0,1,1.2,1.11Zm0-14.68a1.16,1.16,0,0,1-1.2,1.11H92.83a1.16,1.16,0,0,1-1.21-1.11V38.32a1.16,1.16,0,0,1,1.21-1.1h60.31a1.15,1.15,0,0,1,1.2,1.1Z"/>
|
||||
<path class="cls-12"
|
||||
d="M306.21,0H240.82a2.51,2.51,0,0,0-2.42,2.59V206.94a2.51,2.51,0,0,0,2.42,2.6h65.39a2.51,2.51,0,0,0,2.41-2.6V2.59A2.51,2.51,0,0,0,306.21,0Zm-5.82,134.28a1.06,1.06,0,0,1-1,1.1H247.67a1.06,1.06,0,0,1-1-1.1v-5.22a1.07,1.07,0,0,1,1-1.11h51.69a1.07,1.07,0,0,1,1,1.11Zm0-14.68a1.07,1.07,0,0,1-1,1.11H247.67a1.07,1.07,0,0,1-1-1.11v-5.22a1.06,1.06,0,0,1,1-1.1h51.69a1.06,1.06,0,0,1,1,1.1Zm0-14.68a1.07,1.07,0,0,1-1,1.11H247.67a1.07,1.07,0,0,1-1-1.11V99.71a1.07,1.07,0,0,1,1-1.11h51.69a1.07,1.07,0,0,1,1,1.11Zm0-14.67a1.06,1.06,0,0,1-1,1.1H247.67a1.06,1.06,0,0,1-1-1.1V85a1.07,1.07,0,0,1,1-1.11h51.69a1.07,1.07,0,0,1,1,1.11Zm0-14.68a1.07,1.07,0,0,1-1,1.11H247.67a1.07,1.07,0,0,1-1-1.11V70.35a1.06,1.06,0,0,1,1-1.1h51.69a1.06,1.06,0,0,1,1,1.1Zm0-14.68a1.07,1.07,0,0,1-1,1.11H247.67a1.07,1.07,0,0,1-1-1.11V55.68a1.07,1.07,0,0,1,1-1.11h51.69a1.07,1.07,0,0,1,1,1.11Zm0-14.67a1.06,1.06,0,0,1-1,1.1H247.67a1.06,1.06,0,0,1-1-1.1V41a1.07,1.07,0,0,1,1-1.11h51.69a1.07,1.07,0,0,1,1,1.11Zm0-14.68a1.07,1.07,0,0,1-1,1.11H247.67a1.07,1.07,0,0,1-1-1.11V26.32a1.06,1.06,0,0,1,1-1.1h51.69a1.06,1.06,0,0,1,1,1.1Zm0-14.68a1.07,1.07,0,0,1-1,1.11H247.67a1.07,1.07,0,0,1-1-1.11V11.65a1.07,1.07,0,0,1,1-1.11h51.69a1.07,1.07,0,0,1,1,1.11Z"/>
|
||||
</g>
|
||||
<path class="cls-13"
|
||||
d="M182.43,170.83l.09.09a3.44,3.44,0,0,1,.41.44l.12.15a6,6,0,0,1,.39.59.93.93,0,0,0,.05.1,5.36,5.36,0,0,1,.32.73h0a6.39,6.39,0,0,1,.22.78c0,.06,0,.12,0,.19a8.08,8.08,0,0,1,.14.9V175c0,.31,0,.63,0,1V164.28c0-.28,0-.55,0-.82v-.14h0c0-.26-.06-.51-.11-.75l0-.14c0-.06,0-.13,0-.19L184,162c-.05-.17-.1-.33-.16-.49v0h0c-.06-.16-.12-.31-.19-.46s-.09-.17-.13-.25a.93.93,0,0,0-.05-.1.59.59,0,0,1,0-.08,3.74,3.74,0,0,0-.27-.42l-.08-.1-.12-.15c-.05-.06-.1-.13-.16-.19a3,3,0,0,0-.25-.25l-.09-.09A4.06,4.06,0,0,0,182,159l-.11-.07-.12-.07-.18-.12-.5-.23c-.26-.11-.53-.22-.81-.32a2.46,2.46,0,0,1-.29-.09l-.54-.16h0l-.65-.16-.34-.09c-.32-.06-.65-.13-1-.18h0c-.36-.06-.73-.11-1.12-.15l-.39,0-.8-.07H175l-.74,0-.4,0-1.26,0h-2.95v11.49h2.95c.43,0,.85,0,1.26,0l.4,0,.8,0,.79.07.4,0,1.12.16h0l1,.19.34.08.65.16.58.18.29.09c.28.1.55.2.81.31a6.23,6.23,0,0,1,.68.36l.12.07A4.73,4.73,0,0,1,182.43,170.83Z"/>
|
||||
<rect class="cls-13" x="122.87" y="157.13" width="29.56" height="11.49"/>
|
||||
<path class="cls-13"
|
||||
d="M169.61,106.86q0-.52,0-1c0-.08,0-.15,0-.23s0-.35,0-.52a2.51,2.51,0,0,0,0-.27c0-.25-.06-.49-.1-.73a3.31,3.31,0,0,0,0-.33,1.89,1.89,0,0,1-.05-.23l-.12-.52c0-.11,0-.23-.07-.34a2.41,2.41,0,0,1-.08-.25c0-.14-.08-.27-.13-.4a2,2,0,0,0-.08-.26c0-.12-.09-.23-.14-.35s-.08-.21-.13-.31l0-.15c-.08-.18-.18-.34-.26-.51a1.74,1.74,0,0,1-.1-.19.08.08,0,0,1,0,0c-.14-.25-.3-.49-.46-.72l0,0c-.09-.13-.19-.24-.28-.36s-.2-.25-.3-.36,0,0,0,0l-.45-.43-.26-.24a6.42,6.42,0,0,0-.65-.48l-.13-.1h0l-.46-.27a1.63,1.63,0,0,0-.19-.09l-.52-.25c-.14-.06-.29-.13-.44-.18s-.37-.14-.57-.2l-.31-.1a.58.58,0,0,0-.14,0c-.32-.09-.65-.16-1-.22l-.2,0h-.05c-.4-.06-.83-.11-1.26-.14h0c-.39,0-.79,0-1.2,0H159l-.43,0h-.3c-.21,0-.43,0-.64.09h0l-.13,0a3,3,0,0,0-.43.09.35.35,0,0,0-.11,0,1.41,1.41,0,0,0-.22.06l-.24.06-.2.08-.23.08-.14,0-.27.12-.24.11-.08,0-.24.14-.33.18-.08,0-.14.1-.53.38-.12.09-.27.23a53.11,53.11,0,0,0-5.87,6.55l-36.44,45.8-2.55,3.17c-.68.86-1.34,1.75-2,2.68a12.25,12.25,0,0,0-1.44,2.65,7.17,7.17,0,0,0-.45,1.87c0,.2,0,.41,0,.61h0v11.49a7,7,0,0,1,.48-2.49,12.43,12.43,0,0,1,1.44-2.64c.65-.93,1.31-1.82,2-2.69l2.55-3.16L147.76,116a53.36,53.36,0,0,1,5.87-6.56l.39-.31c.17-.14.35-.26.53-.39a1.64,1.64,0,0,0,.22-.14l.33-.19.32-.17.24-.11.41-.17.23-.09.44-.14.22-.06.54-.11.13,0c.23,0,.47-.07.71-.09h.26c.19,0,.38,0,.57,0,.42,0,.83,0,1.23,0a12.44,12.44,0,0,1,1.26.14l.25,0q.51.09,1,.21l.45.14c.2.06.39.12.57.19l.44.19.52.24c.22.12.44.24.65.37h0l.13.1a6.42,6.42,0,0,1,.65.48c.09.07.17.16.26.24s.31.28.45.43.21.26.32.39.19.23.28.36a7.45,7.45,0,0,1,.5.78l.1.19c.11.21.22.43.31.65s.09.22.13.32a6.32,6.32,0,0,1,.22.61c.05.13.09.26.13.4l.15.59.12.52.09.56c0,.24.08.48.1.73s.06.52.08.79c0,.08,0,.15,0,.23,0,.42,0,.84,0,1.29h0V107.13A2.44,2.44,0,0,0,169.61,106.86Z"/>
|
||||
<path class="cls-13"
|
||||
d="M247,164.23c-1,5.13-2.63,9.07-5,11.83a11.68,11.68,0,0,1-.85.87c-.09.09-.18.16-.27.24a6.66,6.66,0,0,1-.59.49c-.19.14-.37.28-.56.4s-.39.27-.6.39l-.38.21c-.28.15-.57.3-.86.43l-.2.08a10,10,0,0,1-1.13.4l-.29.09c-.32.08-.64.16-1,.22L235,180c-.43.07-.87.14-1.32.18h-.23c-.43,0-.87.05-1.33.05s-.9,0-1.34-.05l-.7-.08-.77-.1-.21,0c-.39-.08-.78-.17-1.16-.27s-.48-.16-.72-.25l-.55-.19c-.24-.1-.46-.21-.7-.33s-.33-.14-.48-.23l-.21-.13a8.63,8.63,0,0,1-.82-.51c-.21-.15-.41-.31-.61-.47l-.43-.34c-.21-.19-.41-.39-.6-.59s-.27-.25-.39-.39a12.06,12.06,0,0,1-.77-.94l-.17-.22c-.23-.32-.47-.66-.69-1a1,1,0,0,0-.1-.17c-.2-.34-.4-.69-.59-1a1.62,1.62,0,0,1-.1-.18c-.2-.39-.39-.8-.58-1.22l-.13-.31c-.17-.4-.34-.81-.49-1.24l-.06-.14c-.17-.47-.33-1-.48-1.47l-.12-.43c-.12-.39-.22-.79-.33-1.2,0-.15-.07-.31-.11-.46-.13-.55-.26-1.11-.37-1.68s-.23-1.25-.33-1.9l0-.14c-.1-.61-.19-1.25-.27-1.9,0-.17,0-.34-.07-.51-.07-.57-.13-1.14-.19-1.73,0-.12,0-.23,0-.35l-.09-1c0-.49-.09-1-.13-1.48s0-.75-.07-1.12-.06-1-.09-1.51,0-.81-.05-1.21,0-1-.07-1.55l0-1.3,0-1.61c0-.85,0-1.7,0-2.57v11.48c0,.75,0,1.49,0,2.21,0,.13,0,.24,0,.36,0,.55,0,1.08,0,1.61s0,.88,0,1.3,0,1,.07,1.56,0,.82.05,1.21l.09,1.5c0,.38,0,.76.07,1.12,0,.51.09,1,.13,1.49,0,.29.05.6.08.89,0,0,0,.09,0,.13s0,.23,0,.35c.06.59.12,1.16.19,1.72,0,.18.05.35.07.52.08.65.17,1.28.27,1.9l0,.14c.06.41.13.82.2,1.21,0,.23.09.46.13.68.11.58.24,1.14.37,1.69,0,.15.07.3.11.46s.09.37.14.55.12.43.19.65l.12.43c.15.48.3,1,.46,1.42,0,0,0,0,0,0l.06.14c.15.43.32.84.49,1.24l.13.31.11.26c.15.33.31.65.47,1a1.62,1.62,0,0,0,.1.18c.09.18.19.36.29.54l.3.5.1.17c.18.28.36.56.54.82l.16.2.16.22c.25.33.5.64.77.94l.06.06c.1.12.22.22.33.33s.39.4.6.58.29.23.43.35.4.32.61.47l.07.06q.38.24.75.45l.21.13h0l.46.22c.23.11.46.23.7.33l.55.19c.24.08.47.17.72.24l0,0c.37.1.74.18,1.12.25l.21,0,.2,0c.18,0,.38,0,.57.06s.46.07.7.08l.15,0c.39,0,.78,0,1.19,0h.26c.36,0,.72,0,1.07-.06h.26c.38,0,.76-.08,1.13-.14l.16,0,.32-.07.52-.1.45-.13.29-.08.18-.05c.31-.1.6-.2.89-.32l.06,0,.2-.09.62-.28c.09,0,.16-.1.24-.14l.38-.21c.1-.07.21-.12.31-.18l.29-.21.56-.4.24-.18.35-.31.27-.24a11.84,11.84,0,0,0,.85-.88c2.39-2.75,4-6.69,5-11.82a113.49,113.49,0,0,0,1.44-20.15V144.08A113.42,113.42,0,0,1,247,164.23Z"/>
|
||||
<path class="cls-13"
|
||||
d="M267.31,143.7c0-.12,0-.23,0-.34,0-.49,0-1,0-1.43s0-.69,0-1c0-.5,0-1-.06-1.46,0-.31,0-.62,0-.92,0-.54-.06-1.08-.1-1.61,0-.23,0-.46,0-.68-.06-.75-.12-1.49-.19-2.22v0c-.06-.63-.13-1.25-.2-1.87,0-.19-.05-.37-.07-.56-.06-.43-.11-.86-.17-1.29,0-.22-.07-.43-.1-.65-.06-.39-.12-.78-.19-1.17,0-.21-.07-.42-.1-.62l-.06-.35c0-.14-.06-.27-.08-.41l-.33-1.63c-.05-.21-.09-.42-.14-.63-.16-.71-.33-1.41-.51-2.08h0c-.16-.6-.33-1.19-.51-1.76l-.18-.56c-.12-.38-.25-.77-.38-1.14,0-.07,0-.14-.07-.21s-.13-.32-.19-.49l-.3-.8c-.09-.23-.19-.46-.29-.69s-.21-.51-.32-.76c0-.08-.07-.17-.11-.25-.13-.29-.27-.58-.4-.86-.34-.68-.7-1.34-1.06-2-.05-.08-.09-.17-.13-.25l-.18-.29c-.2-.34-.4-.68-.6-1s-.23-.38-.35-.56c-.23-.36-.47-.72-.72-1.07-.07-.11-.14-.22-.22-.33l0-.06q-.56-.77-1.14-1.5l-.3-.37c-.3-.36-.61-.72-.92-1.07-.06-.07-.13-.16-.2-.23l-.17-.17c-.44-.49-.9-1-1.37-1.41l-1-.92-.32-.27-.74-.61-.37-.28q-.4-.31-.81-.6l-.29-.21-.1-.07-.42-.27c-.26-.18-.53-.35-.8-.52l-.56-.33-.78-.45-.18-.1-.29-.15c-.42-.21-.83-.42-1.26-.62l-.48-.22c-.57-.25-1.14-.49-1.73-.71s-.91-.33-1.37-.48l-.46-.14-.74-.22-.17,0c-.49-.14-1-.26-1.49-.37l-.24-.06c-.59-.13-1.18-.24-1.79-.34l-.12,0-.57-.08-1-.13-.75-.08-1-.09-.25,0-.79,0-.52,0c-.54,0-1.08,0-1.63,0h-.91c-.35,0-.7,0-1.05,0l-.47,0-1.41.1h-.07c-.45.05-.9.09-1.34.15l-.41.06-.91.13-.13,0-.41.07-.69.13-.55.11-.67.15-.19,0-.37.1-.61.15-.56.16-.59.18-.21.06-.33.12-.59.2-.53.19-.57.22-.24.09-.27.12-.62.26-.48.22-.61.3-.28.13a1.51,1.51,0,0,1-.18.09l-.76.42-.36.19c-.37.21-.73.43-1.09.65l0,0c-.58.36-1.13.75-1.67,1.15-.17.11-.32.24-.48.36s-.45.33-.66.51-.32.28-.48.41l-.55.48c-.37.33-.73.68-1.08,1l-.44.43c-.48.5-1,1-1.4,1.56l-.17.22c-.39.47-.77,1-1.13,1.47-.14.19-.27.39-.4.58-.28.41-.56.82-.82,1.24l-.41.67c-.26.44-.51.89-.76,1.35l-.33.62c-.34.68-.67,1.36-1,2.07A55.46,55.46,0,0,0,198,128.9a127.46,127.46,0,0,0-1.1,17.57V158a127.36,127.36,0,0,1,1.1-17.57A55.34,55.34,0,0,1,201.46,127c.31-.71.64-1.4,1-2.07l.33-.62c.25-.46.5-.91.76-1.35l.41-.67c.26-.42.54-.84.82-1.24.13-.2.26-.4.4-.59.36-.5.74-1,1.13-1.46l.17-.22c.45-.54.92-1.06,1.4-1.56l.44-.44q.52-.53,1.08-1l.55-.48c.37-.32.75-.62,1.14-.92.16-.12.31-.25.48-.37.55-.4,1.12-.8,1.7-1.17.36-.22.72-.44,1.09-.65l.36-.2.76-.41.46-.23.61-.29.48-.22.62-.27.51-.2.57-.22.53-.2.59-.2.54-.17.59-.18.56-.16.61-.15.56-.14.66-.15.56-.11.68-.13.55-.1.91-.13.41-.05c.44-.06.89-.11,1.34-.15h.07c.46,0,.93-.08,1.41-.1l.47,0,1.05,0h.91c.55,0,1.09,0,1.63,0l.52,0,1,.06c.33,0,.65.06,1,.09l.75.07,1,.14.69.1c.61.1,1.2.21,1.79.34l.24,0,1.49.37.91.27.46.14c.46.15.92.31,1.37.48s1.16.46,1.73.71l.48.22c.43.2.84.4,1.26.62l.47.25q.39.21.78.45c.19.11.38.21.56.33s.54.34.8.51l.52.35.29.21c.27.19.55.39.81.6l.36.28c.26.2.5.4.75.61l.32.27c.34.3.68.6,1,.92s.93.92,1.37,1.4l.37.41c.31.35.62.71.92,1.07l.3.37c.39.49.77,1,1.14,1.5l.26.39c.25.35.49.71.72,1.07l.35.55.6,1,.31.54c.36.65.72,1.31,1.06,2l.51,1.11c.11.25.22.5.32.76s.2.45.29.69l.3.8c.09.23.18.46.26.7s.26.75.38,1.14l.18.56c.18.57.35,1.16.51,1.76h0c.18.67.35,1.37.51,2.07.05.21.09.43.14.64.11.53.22,1.08.33,1.63,0,.25.09.5.14.75s.07.42.1.63c.07.39.13.77.19,1.17,0,.21.07.43.1.65.06.42.11.85.17,1.29,0,.19.05.37.07.56.07.62.14,1.25.21,1.9s.13,1.46.19,2.21c0,.23,0,.46,0,.69,0,.53.07,1.07.1,1.61,0,.3,0,.61,0,.91,0,.49.05,1,.06,1.46s0,.68,0,1,0,1,0,1.43c0,.67,0,1.34,0,2h0V145.37C267.32,144.81,267.32,144.25,267.31,143.7Z"/>
|
||||
<path class="cls-13"
|
||||
d="M356.8,170.83l.09.09a3.44,3.44,0,0,1,.41.44l.12.15a6,6,0,0,1,.39.59.93.93,0,0,0,.05.1,5.36,5.36,0,0,1,.32.73h0a5.92,5.92,0,0,1,.22.78,1.06,1.06,0,0,1,0,.19,8.46,8.46,0,0,1,.14.9.49.49,0,0,0,0,.12c0,.31,0,.64,0,1V164.28c0-.29,0-.57,0-.84a.49.49,0,0,1,0-.12h0c0-.25-.06-.5-.1-.74,0,0,0-.1,0-.15a1.29,1.29,0,0,0,0-.19c0-.09,0-.19-.06-.27s-.1-.35-.16-.51h0c-.06-.16-.12-.32-.19-.47s-.09-.17-.13-.25l-.05-.1s0-.05,0-.08-.17-.28-.26-.42l-.09-.1-.12-.15-.16-.2-.25-.24-.09-.09a4.06,4.06,0,0,0-.46-.36l-.11-.07-.12-.07-.19-.12-.49-.23c-.26-.11-.53-.22-.81-.31l-.29-.1-.54-.16h0l-.65-.16-.34-.08-1-.19h-.09c-.36-.06-.74-.11-1.12-.15l-.38,0-.82-.07h-.05l-.73,0-.41,0-1.26,0h-3v11.49h3c.43,0,.85,0,1.26,0l.4,0,.79,0,.82.07.38,0,1.12.16h.09l1,.18.34.08.65.16.58.18.29.09c.28.1.55.2.81.31a6.23,6.23,0,0,1,.68.36l.12.07A4.73,4.73,0,0,1,356.8,170.83Z"/>
|
||||
<rect class="cls-13" x="297.24" y="157.13" width="29.56" height="11.49"/>
|
||||
<path class="cls-13"
|
||||
d="M344,106.86c0-.35,0-.69,0-1,0-.08,0-.15,0-.23s0-.35,0-.52,0-.18,0-.27c0-.25-.06-.49-.1-.73s0-.23-.05-.33a1.89,1.89,0,0,0-.05-.23c0-.18-.07-.35-.11-.52s-.05-.23-.08-.34a1.83,1.83,0,0,0-.08-.25l-.12-.4c0-.09-.05-.18-.08-.26s-.09-.23-.14-.35-.08-.21-.13-.31l-.06-.15c-.08-.18-.17-.34-.26-.51a1.74,1.74,0,0,0-.1-.19.08.08,0,0,0,0,0q-.21-.37-.45-.72l0,0c-.09-.12-.19-.24-.29-.35s-.19-.26-.29-.37l0,0a6.14,6.14,0,0,0-.45-.43l-.25-.24a7.62,7.62,0,0,0-.64-.48l-.14-.1h0l-.46-.27a1.11,1.11,0,0,0-.19-.09c-.16-.09-.34-.17-.51-.25s-.29-.13-.44-.18l-.57-.2-.31-.1-.14,0a9.78,9.78,0,0,0-1-.22l-.2,0h0c-.41-.06-.83-.11-1.27-.14h0c-.38,0-.78,0-1.19,0h-.14l-.43,0h-.3c-.21,0-.43,0-.64.09h0l-.13,0c-.15,0-.29,0-.43.09a.35.35,0,0,0-.11,0,1.41,1.41,0,0,0-.22.06l-.24.06-.2.08-.23.08-.14,0-.27.12-.24.11-.08,0-.24.14-.33.18-.07,0-.14.11a4.7,4.7,0,0,0-.53.38l-.12.08-.28.24a53,53,0,0,0-5.88,6.55l-36.43,45.8c-1,1.25-1.86,2.31-2.54,3.17s-1.36,1.75-2,2.68a12.25,12.25,0,0,0-1.44,2.65,7.17,7.17,0,0,0-.45,1.87c0,.2,0,.41,0,.61h0v11.49a7,7,0,0,1,.48-2.49,12.43,12.43,0,0,1,1.44-2.64c.64-.93,1.31-1.82,2-2.69l2.54-3.16L322.12,116a53.27,53.27,0,0,1,5.88-6.56l.4-.32.53-.38.21-.14.33-.19.32-.17.24-.11.41-.17.23-.09.44-.14.22-.06.54-.11.13,0c.23,0,.47-.07.71-.09H333c.19,0,.37,0,.57,0,.42,0,.83,0,1.22,0a12.65,12.65,0,0,1,1.27.14l.25,0q.51.09,1,.21l.45.14c.19.06.39.12.57.19l.44.19.51.24c.23.12.45.24.65.37h0l.15.1a7.62,7.62,0,0,1,.64.48c.09.07.17.16.26.24s.3.28.44.43a3.89,3.89,0,0,1,.32.39c.1.12.2.23.29.36a6.07,6.07,0,0,1,.49.78,1.14,1.14,0,0,1,.1.19c.11.21.22.43.32.65s.09.21.13.32.15.4.22.61l.12.39c.06.2.11.4.16.6s.08.34.11.52.07.37.1.56.07.48.1.73.06.52.08.79c0,.08,0,.15,0,.23,0,.42,0,.84,0,1.29h0V106.86Z"/>
|
||||
<path class="cls-14"
|
||||
d="M181.06,170q3.19,1.36,3.2,5.95a6,6,0,0,1-2.61,5.45c-1.74,1.15-4.36,1.72-7.84,1.72h-4.19v12q0,5-2.34,7.39a9.16,9.16,0,0,1-12.48-.07c-1.58-1.65-2.37-4.1-2.37-7.32v-12H117.92q-6.53,0-9.79-2.78a9.36,9.36,0,0,1-3.27-7.56,7,7,0,0,1,.48-2.49,12.43,12.43,0,0,1,1.44-2.64c.65-.93,1.31-1.82,2-2.69l2.55-3.16L147.76,116a53.36,53.36,0,0,1,5.87-6.56,8.12,8.12,0,0,1,5.54-2q10.44,0,10.45,11.25v50h2.95A22.17,22.17,0,0,1,181.06,170Zm-28.63-1.35V131.09l-29.56,37.53h29.56"/>
|
||||
<path class="cls-14"
|
||||
d="M262.1,126.69q5.22,10.67,5.22,30.17A104.74,104.74,0,0,1,266,175.07a40.85,40.85,0,0,1-5.09,13.83,32.76,32.76,0,0,1-12.1,11.76,33.29,33.29,0,0,1-16.5,4.13,32.86,32.86,0,0,1-18.73-5.55,34.11,34.11,0,0,1-12.48-15.38A54.59,54.59,0,0,1,197.92,172a93.33,93.33,0,0,1-1-14,127.36,127.36,0,0,1,1.1-17.57A55.34,55.34,0,0,1,201.46,127a30.81,30.81,0,0,1,11.79-14.18q7.73-4.87,18.46-4.88a36.2,36.2,0,0,1,12.85,2.17,29.45,29.45,0,0,1,10.14,6.33A36.1,36.1,0,0,1,262.1,126.69Zm-15.06,49a113.49,113.49,0,0,0,1.44-20.15A101.2,101.2,0,0,0,247,136.22c-1-5-2.7-8.81-5.08-11.37S236.2,121,232,121q-9.07,0-12.61,8.59t-3.54,26.48a107,107,0,0,0,1.51,19.9q1.51,7.76,5.09,11.73a12.37,12.37,0,0,0,9.69,4q6.33,0,9.9-4.14c2.39-2.75,4-6.69,5-11.82"/>
|
||||
<path class="cls-14"
|
||||
d="M355.43,170q3.19,1.36,3.2,5.95a6,6,0,0,1-2.62,5.45q-2.61,1.73-7.83,1.72H344v12q0,5-2.33,7.39a8.29,8.29,0,0,1-6.26,2.42,8.19,8.19,0,0,1-6.22-2.49c-1.58-1.65-2.37-4.1-2.37-7.32v-12H292.29q-6.54,0-9.8-2.78a9.42,9.42,0,0,1-3.26-7.56,7,7,0,0,1,.48-2.49,12.43,12.43,0,0,1,1.44-2.64c.64-.93,1.31-1.82,2-2.69l2.54-3.16L322.12,116a53.27,53.27,0,0,1,5.88-6.56,8.1,8.1,0,0,1,5.54-2q10.44,0,10.44,11.25v50h3A22.17,22.17,0,0,1,355.43,170Zm-28.63-1.35V131.09l-29.56,37.53H326.8"/>
|
||||
<path class="cls-15"
|
||||
d="M270.46,172.17c.07,1.42-.5,2.61-1.28,2.64s-1.46-1.08-1.53-2.5.5-2.6,1.28-2.64S270.39,170.75,270.46,172.17Z"/>
|
||||
<path class="cls-16"
|
||||
d="M285.58,170.34c.33,0,.62.46.65,1.06s-.21,1.1-.54,1.12l-.88.09c.12-.19.17-.36,0-.48-.38-.34-.75-.34-1-.08s-.17.57-.48.71h0l-3.26.34-.61.07a3.68,3.68,0,0,0,.19-1.45,3.76,3.76,0,0,0-.33-1.42h2c0,.31.1.73.42.83a19.28,19.28,0,0,0,3.06.13c1,0,.41-.65.47-.93h.29Z"/>
|
||||
<path class="cls-17"
|
||||
d="M279.17,171.65a3.49,3.49,0,0,1-1.1,2.61l-8.67,1.23c.89-.21,1.53-1.64,1.44-3.34S270,169.06,269,169l8.79.38A2.92,2.92,0,0,1,279.17,171.65Z"/>
|
||||
<path class="cls-18"
|
||||
d="M279.37,170.3a3.76,3.76,0,0,1,.33,1.42,3.68,3.68,0,0,1-.19,1.45c-.21.6-.57,1-1,1l-.43.06a3.49,3.49,0,0,0,1.1-2.61,2.92,2.92,0,0,0-1.34-2.3l.44,0C278.7,169.35,279.1,169.71,279.37,170.3Z"/>
|
||||
<path class="cls-18"
|
||||
d="M269.18,174.81c.78,0,1.35-1.22,1.28-2.64s-.75-2.54-1.53-2.5-1.35,1.22-1.28,2.64S268.41,174.85,269.18,174.81Zm1.66-2.66c.09,1.7-.55,3.13-1.44,3.34h0l-.17,0c-1,0-1.86-1.38-2-3.19s.64-3.31,1.63-3.36H269C270,169.06,270.76,170.44,270.84,172.15Z"/>
|
||||
<path d="M303,176a1.14,1.14,0,0,0,.33.71,2.75,2.75,0,0,1-.88-.39A4.37,4.37,0,0,0,303,176Z"/>
|
||||
<path d="M298.64,166.65l.12.16A5.6,5.6,0,0,0,297,169a4.63,4.63,0,0,1-2.06-1.52C296.92,168,297.5,166.05,298.64,166.65Z"/>
|
||||
<path d="M306.62,169.68c-.86-3.88-3.84-4.21-3.84-4.21s-3.07-.47-4.14,1.18l.12.16A5.6,5.6,0,0,0,297,169a6.88,6.88,0,0,0,1.35.43c1.8.34,4.18.13,4.85,1.15s.22,2.66-.91,4.16c-.59.8-.28,1.31.16,1.62A4.37,4.37,0,0,0,303,176a.46.46,0,0,1,.28-.48,1.61,1.61,0,0,1,.49-.11,2.5,2.5,0,0,0,1.34-.39C305.68,174.58,307.49,173.56,306.62,169.68Z"/>
|
||||
<path class="cls-19"
|
||||
d="M320.54,231.08c0,.63.23,3.56-.53,3.84a54,54,0,0,1-7.28,1.17c-1.07,0-.9-.85-.9-.85s7.18-.51,7.81-1.12.32-2.83.06-4.08a23.55,23.55,0,0,1-.41-4.38,16,16,0,0,0,.17-1.74c-.06-.35-1.59-1.62-1.59-1.62.11-.22.39-.31.9-.31s1.4,1.52,1.44,1.87-.38,1.49-.38,2.36S320.49,230.45,320.54,231.08Z"/>
|
||||
<path class="cls-20"
|
||||
d="M319.7,230c.26,1.25.57,3.47-.06,4.08s-7.81,1.12-7.81,1.12,0-.92,0-1.3,4.06-1.18,4.2-2-.47-2.2-1.23-2.16c-.38,0-.48-.26-.49-.57a7.35,7.35,0,0,1,.07-.78c0-.24.95,1,1.35.77s.86-3.75-.28-4.77a1.05,1.05,0,0,0-.86-.28s-.8-.86-.69-1.18.63-.81,1-.31,1.46-.07,1.88-.22a4.57,4.57,0,0,1,1.13-.14s1.53,1.27,1.59,1.62a16,16,0,0,1-.17,1.74A23.55,23.55,0,0,0,319.7,230Z"/>
|
||||
<path class="cls-21"
|
||||
d="M313.73,229.3l.17,3L295,235.55a3.15,3.15,0,0,1-3.64-2.68l-2.74-20.29,9.2,2.1-.35,12.89,16-3v.18Z"/>
|
||||
<path class="cls-22"
|
||||
d="M288.06,204.33c.51.45,9.48,2.36,15.15,2.31h0l-.77,5.1a3.62,3.62,0,0,1-4.4,3l-.24,0-9.2-2.1-8.66-2,1.86,19-2.31.39-4.45.75-.33.06L272.81,204a2.71,2.71,0,0,1,3.39-2.81Z"/>
|
||||
<path class="cls-20"
|
||||
d="M305.83,192.12h0a23,23,0,0,0,.05,2.76l-10.67.31c-.63-.74-1.57-1.4-2-1a.6.6,0,0,0,.34,1c.32,0,1.08.71-.34.58s-2.1-.85-2.62-.44-.66,2.48,0,2.65,4.27.33,5.37-.22l10.05.51c.16,3,.39,6.37.53,7.94a11,11,0,0,1-3.37.43c-5.67.05-14.64-1.86-15.15-2.31s1.25-9.1,2.52-15.42a14.92,14.92,0,0,1-2.92,1.4,5.36,5.36,0,0,1-1.91-2.19,6.93,6.93,0,0,1-.7-4.55,2,2,0,0,1,.24-.6c1.44-1.05,5.18-2.8,7.2-4.19a8.25,8.25,0,0,1,4.06-1.22c-.17.32-.75,3,.87,3.44s5-.87,5-3.08a6.18,6.18,0,0,1,3.22.52c1.77,1,4.07,6.39,5.89,11.34-.32,1.08-2.22,1.88-4,2.19A8.16,8.16,0,0,1,305.83,192.12Z"/>
|
||||
<polygon class="cls-23"
|
||||
points="279.49 229.99 279.48 231.93 275.27 232.85 275.04 231.33 275.04 230.74 279.49 229.99"/>
|
||||
<path class="cls-23"
|
||||
d="M314.38,228.43a7.35,7.35,0,0,0-.07.78h0l-.58.09-.27-4.55,2-.32c1.14,1,.61,4.6.28,4.77S314.38,228.19,314.38,228.43Z"/>
|
||||
<path class="cls-23"
|
||||
d="M314,197.18c-.52-1.65-1.43-4.45-2.51-7.4-.32,1.08-2.22,1.88-4,2.19l1.08,2.83-2.68.08-10.67.31c-.63-.74-1.57-1.4-2-1a.6.6,0,0,0,.34,1c.32,0,1.08.71-.34.58s-2.1-.85-2.62-.44-.66,2.48,0,2.65,4.27.33,5.37-.22l10.05.51,6.84.35A1.11,1.11,0,0,0,314,197.18Z"/>
|
||||
<path class="cls-23"
|
||||
d="M302.38,177.92c0,2.21-3.34,3.52-5,3.08s-1-3.12-.87-3.44a14.35,14.35,0,0,1,1.51,0c.17-.09.3-.54.3-.91a3.83,3.83,0,0,0,1.12.27,5.52,5.52,0,0,0,3-.59c-.32.56-.81,1.15-.74,1.48C301.73,177.92,302,177.93,302.38,177.92Z"/>
|
||||
<path class="cls-23"
|
||||
d="M303.19,170.55c.67,1,.22,2.66-.91,4.16-.59.8-.28,1.31.16,1.62a5.52,5.52,0,0,1-3,.59,3.83,3.83,0,0,1-1.12-.27c-1.65-.71-2.29-2.23-2.05-4.86a9.18,9.18,0,0,1,1-2.68,3.91,3.91,0,0,0,1,.29C300.14,169.74,302.52,169.53,303.19,170.55Z"/>
|
||||
<path class="cls-23"
|
||||
d="M285.29,170.34h0c0-.29-.74-1.21-1.47-1.51a6.8,6.8,0,0,0-2.48,0c-.34,0-.84,1.33-.9,1.48h.9c0,.31.1.73.42.83a19.28,19.28,0,0,0,3.06.13C285.8,171.29,285.23,170.62,285.29,170.34Z"/>
|
||||
<path class="cls-23"
|
||||
d="M283.87,172.05c.22-.26.59-.26,1,.08.14.12.09.29,0,.48l-1.42.15C283.7,172.62,283.64,172.31,283.87,172.05Z"/>
|
||||
<path class="cls-23"
|
||||
d="M283.38,172.76h0l1.42-.15c-.21.34-.64.74-.7,1.06-.09.49-1.08.75-1.52,1.35l-.48,10.24,2.94-1.69a6.93,6.93,0,0,0,.7,4.55L279.2,191a1,1,0,0,1-1.41-1.07l2.2-15.22c.12-1,.13-1.61.13-1.61Z"/>
|
||||
<path class="cls-24" d="M303,187.14l1.72,4.81a3.36,3.36,0,0,0,1.11.17"/>
|
||||
<path class="cls-25"
|
||||
d="M317.87,222.3c.11-.22.39-.31.9-.31s1.4,1.52,1.44,1.87-.38,1.49-.38,2.36.66,4.23.71,4.86.23,3.56-.53,3.84a54,54,0,0,1-7.28,1.17c-1.07,0-.9-.85-.9-.85"/>
|
||||
<ellipse class="cls-23" cx="303.14" cy="173.18" rx="1.32" ry="0.91"
|
||||
transform="translate(13 367.35) rotate(-63.53)"/>
|
||||
<ellipse class="cls-26" cx="303.14" cy="173.18" rx="0.77" ry="0.53"
|
||||
transform="translate(13 367.35) rotate(-63.53)"/>
|
||||
<path class="cls-19"
|
||||
d="M262.55,235.72a.72.72,0,0,1-.12-1.21c-.17.18.05.37.48.39a36.08,36.08,0,0,0,11.77-.55c1-.08,3.65.2,5.06.15,1.16-.05,1.62-.47,1.73-.86a1,1,0,0,1,.17,1.64c-.6.61-4.14.52-4.82.51s-7.56,0-8.57.12A26.72,26.72,0,0,1,262.55,235.72Z"/>
|
||||
<path class="cls-20"
|
||||
d="M280.69,231.61a8.33,8.33,0,0,1,.81,1.8.91.91,0,0,1,0,.23c-.11.39-.57.81-1.73.86-1.41.05-4-.23-5.06-.15a36.08,36.08,0,0,1-11.77.55c-.43,0-.65-.21-.48-.39a33.2,33.2,0,0,1,4.91-1.81,12.78,12.78,0,0,0,6.17-2.66,3.77,3.77,0,0,1,.75,0c.87.08,1.61.44,1.58.78s-.47.82.46.92a3.33,3.33,0,0,0,2.36-.58c.33-.37.34-.67,1-.56.18,0,.33,0,.46,0,.39,0,.58,0,.7.17S280.52,231.25,280.69,231.61Z"/>
|
||||
<path class="cls-25"
|
||||
d="M262.43,234.51a.72.72,0,0,0,.12,1.21,26.72,26.72,0,0,0,5.7.19c1-.17,7.9-.13,8.57-.12s4.22.1,4.82-.51a1,1,0,0,0-.17-1.64h0"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 32 KiB |
1
plugin/console/web/assets/404-85aadbe0.css
Normal file
@@ -0,0 +1 @@
|
||||
.page-container[data-v-bed2e9f0]{width:100%;border-radius:4px;padding:50px 0;height:100vh}.page-container .text-center h1[data-v-bed2e9f0]{color:#666;padding:20px 0}.page-container img[data-v-bed2e9f0]{width:350px;margin:0 auto}
|
||||
1
plugin/console/web/assets/404-e8ac9ef9.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m as s}from"./vendor-ec30964e.js";import{_ as n}from"./index-747e11ee.js";const _=""+new URL("404-54dd6499.svg",import.meta.url).href;const t=e=>(Vue.pushScopeId("data-v-bed2e9f0"),e=e(),Vue.popScopeId(),e),r={class:"flex flex-col justify-center page-container"},a=t(()=>Vue.createElementVNode("div",{class:"text-center"},[Vue.createElementVNode("img",{src:_,alt:""})],-1)),d={class:"text-center"},p=t(()=>Vue.createElementVNode("h1",{class:"text-base text-gray-500"},"抱歉,你访问的页面不存在",-1)),i=Vue.createTextVNode("回到首页"),l=Vue.defineComponent({setup(e){const o=s();function u(){o.push("/")}return(m,V)=>{const c=Vue.resolveComponent("n-button");return Vue.openBlock(),Vue.createElementBlock("div",r,[a,Vue.createElementVNode("div",d,[p,Vue.createVNode(c,{type:"info",onClick:u},{default:Vue.withCtx(()=>[i]),_:1})])])}}}),x=n(l,[["__scopeId","data-v-bed2e9f0"]]);export{x as default};
|
||||
6
plugin/console/web/assets/TableAction-8944830d.js
Normal file
1
plugin/console/web/assets/TableAction-ce36c622.css
Normal file
@@ -0,0 +1 @@
|
||||
.table-toolbar-inner-popover-title{padding:3px 0}.table-toolbar-right-icon{margin-left:12px;font-size:16px;color:var(--text-color);cursor:pointer}.table-toolbar-right-icon :hover{color:#1890ff}.table-toolbar-inner-checkbox{display:flex;align-items:center;padding:10px 14px}.table-toolbar-inner-checkbox:hover{background:#e6f7ff}.table-toolbar-inner-checkbox .drag-icon{display:inline-flex;margin-right:8px;cursor:move}.table-toolbar-inner-checkbox .fixed-item{display:flex;align-items:center;justify-content:flex-end;margin-left:auto}.table-toolbar-inner-checkbox .ant-checkbox-wrapper{flex:1}.table-toolbar-inner-checkbox .ant-checkbox-wrapper:hover{color:#1890ff!important}.table-toolbar-inner-checkbox-dark:hover{background:hsla(0,0%,100%,.08)}.toolbar-popover .n-popover__content{padding:0}.editable-cell-content{position:relative;overflow-wrap:break-word;word-break:break-word;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.editable-cell-content-comp{flex:1}.editable-cell-content .edit-icon{font-size:14px;display:none;width:20px;cursor:pointer}.editable-cell-content:hover .edit-icon{display:inline-block}.editable-cell-action{display:flex;align-items:center;justify-content:center}.table-toolbar[data-v-eb93f5a0]{display:flex;justify-content:space-between;padding:0 0 16px}.table-toolbar-left[data-v-eb93f5a0]{display:flex;align-items:center;justify-content:flex-start;flex:1}.table-toolbar-left-title[data-v-eb93f5a0]{display:flex;align-items:center;justify-content:flex-start;font-size:16px;font-weight:600}.table-toolbar-right[data-v-eb93f5a0]{display:flex;justify-content:flex-end;flex:1}.table-toolbar-right-icon[data-v-eb93f5a0]{margin-left:12px;font-size:16px;cursor:pointer;color:var(--text-color)}.table-toolbar-right-icon[data-v-eb93f5a0] :hover{color:#1890ff}.table-toolbar-inner-popover-title[data-v-eb93f5a0]{padding:2px 0}
|
||||
1
plugin/console/web/assets/account-4735dbec.css
Normal file
@@ -0,0 +1 @@
|
||||
.thing-cell[data-v-f158d1de]{margin:0 12px 12px;padding:15px}.thing-cell[data-v-f158d1de]:hover{background:#f0faff;cursor:pointer}.thing-cell-on[data-v-f158d1de]{background:#f0faff}.thing-cell-on[data-v-f158d1de] .n-thing-main .n-thing-header .n-thing-header__title{color:#2d8cf0}
|
||||
1
plugin/console/web/assets/account-82f5b10e.js
Normal file
@@ -0,0 +1 @@
|
||||
import{i as B,q as w,_ as k,u as N,P as x}from"./index-747e11ee.js";import{m as y,l as E}from"./vendor-ec30964e.js";const b=Vue.defineComponent({setup(v){const{t:e}=B.global,V={oldpassword:{required:!0,message:e("请输入旧密码"),trigger:"blur"},password:{required:!0,message:e("请输入新密码"),trigger:"blur"}},n=Vue.ref(null),l=naive.useMessage(),t=Vue.reactive({oldpassword:"",password:""});function d(){n.value.validate(u=>{if(u)l.error(e("验证失败,请填写完整信息"));else{const{oldpassword:o,password:r}=t;w({oldpassword:o,password:r}).then(()=>{l.info(e("修改密码成功,下次登录请使用新密码!"))})}})}return(u,o)=>{const r=Vue.resolveComponent("n-input"),a=Vue.resolveComponent("n-form-item"),p=Vue.resolveComponent("n-button"),s=Vue.resolveComponent("n-space"),C=Vue.resolveComponent("n-form"),_=Vue.resolveComponent("n-grid-item"),m=Vue.resolveComponent("n-grid");return Vue.openBlock(),Vue.createBlock(m,{cols:"2 s:2 m:2 l:3 xl:3 2xl:3",responsive:"screen"},{default:Vue.withCtx(()=>[Vue.createVNode(_,null,{default:Vue.withCtx(()=>[Vue.createVNode(C,{"label-width":80,model:Vue.unref(t),rules:V,ref_key:"formRef",ref:n},{default:Vue.withCtx(()=>[Vue.createVNode(a,{label:u.$t("旧密码"),path:"oldpassword"},{default:Vue.withCtx(()=>[Vue.createVNode(r,{value:Vue.unref(t).oldpassword,"onUpdate:value":o[0]||(o[0]=c=>Vue.unref(t).oldpassword=c),placeholder:u.$t("请输入旧密码")},null,8,["value","placeholder"])]),_:1},8,["label"]),Vue.createVNode(a,{label:u.$t("新密码"),path:"password"},{default:Vue.withCtx(()=>[Vue.createVNode(r,{placeholder:u.$t("请输入新密码"),value:Vue.unref(t).password,"onUpdate:value":o[1]||(o[1]=c=>Vue.unref(t).password=c)},null,8,["placeholder","value"])]),_:1},8,["label"]),Vue.createElementVNode("div",null,[Vue.createVNode(s,null,{default:Vue.withCtx(()=>[Vue.createVNode(p,{type:"primary",onClick:d},{default:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(u.$t("确定")),1)]),_:1})]),_:1})])]),_:1},8,["model"])]),_:1})]),_:1})}}});const A=Vue.defineComponent({setup(v){const{t:e}=B.global,V=[{name:e("修改密码"),key:1},{name:e("退出登录"),key:3}],n=Vue.ref(1),l=Vue.ref(e("修改密码")),t=naive.useMessage(),d=N(),u=naive.useDialog(),o=y(),r=E();function a(){u.info({title:e("提示"),content:e("您确定要退出登录吗"),positiveText:e("确定"),negativeText:e("取消"),onPositiveClick:()=>{d.logout().then(()=>{t.success("成功退出登录"),localStorage.removeItem("TABS-ROUTES"),o.replace({name:x.BASE_LOGIN_NAME,query:{redirect:r.fullPath}})})},onNegativeClick:()=>{}})}function p(s){s.key==3?a():(n.value=s.key,l.value=s.name)}return(s,C)=>{const _=Vue.resolveComponent("n-thing"),m=Vue.resolveComponent("n-list-item"),c=Vue.resolveComponent("n-list"),f=Vue.resolveComponent("n-grid-item"),g=Vue.resolveComponent("PM2"),F=Vue.resolveComponent("n-card"),h=Vue.resolveComponent("n-grid");return Vue.openBlock(),Vue.createBlock(h,{"x-gap":24},{default:Vue.withCtx(()=>[Vue.createVNode(f,{span:"6"},{default:Vue.withCtx(()=>[Vue.createVNode(c,null,{default:Vue.withCtx(()=>[Vue.createVNode(m,null,{default:Vue.withCtx(()=>[(Vue.openBlock(),Vue.createElementBlock(Vue.Fragment,null,Vue.renderList(V,i=>Vue.createVNode(_,{class:Vue.normalizeClass(["thing-cell",{"thing-cell-on":n.value===i.key}]),key:i.key,onClick:S=>p(i)},{header:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(i.name),1)]),_:2},1032,["class","onClick"])),64))]),_:1})]),_:1})]),_:1}),Vue.createVNode(f,{span:"18"},{default:Vue.withCtx(()=>[Vue.createVNode(F,{bordered:!1,size:"small",title:l.value,class:"proCard"},{default:Vue.withCtx(()=>[n.value===1?(Vue.openBlock(),Vue.createBlock(b,{key:0})):Vue.createCommentVNode("",!0),n.value===2?(Vue.openBlock(),Vue.createBlock(g,{key:1})):Vue.createCommentVNode("",!0)]),_:1},8,["title"])]),_:1})]),_:1})}}}),P=k(A,[["__scopeId","data-v-f158d1de"]]);export{P as default};
|
||||
BIN
plugin/console/web/assets/audiodec-28b192dd.wasm
Normal file
1
plugin/console/web/assets/check-912be29a.js
Normal file
@@ -0,0 +1 @@
|
||||
import{b as r}from"./index-60c113a0.js";import{d as n,l as i}from"./vendor-ec30964e.js";const a=n({id:"plugin-config",state:()=>({}),getters:{},actions:{async getConfig(e,t="global"){return this[e]||(this[e]={}),this[e][t]?this[e][t]:r(e,t,!0).then(u=>this[e][t]=u)}}}),p=Vue.defineComponent({props:{name:null,value:{type:Boolean}},emits:["update:value"],setup(e,{emit:t}){const u=e;return a().getConfig(i().params.id,u.name).catch(()=>t("update:value",!0)),(l,c)=>{const o=Vue.resolveComponent("n-alert");return e.value?(Vue.openBlock(),Vue.createBlock(o,{key:0,title:"当前功能受限",type:"error"},{default:Vue.withCtx(()=>[Vue.createTextVNode(" 当前实例未安装插件:"+Vue.toDisplayString(e.name),1)]),_:1})):Vue.createCommentVNode("",!0)}}});export{p as _};
|
||||
1
plugin/console/web/assets/detail-2e3b75cf.css
Normal file
@@ -0,0 +1 @@
|
||||
.events[data-v-8e73e23e]{width:100%;height:300px}
|
||||
1
plugin/console/web/assets/detail-80892e45.js
Normal file
@@ -0,0 +1 @@
|
||||
import{l as x}from"./vendor-ec30964e.js";import{k as y,l as b}from"./index-60c113a0.js";import{ac as g,ad as c,ae as $,af as w,ag as A,ah as L,ai as N,aj as k,ak as E,al as S,am as I}from"./index.esm.min-024473c8.js";import{Y as d}from"./index-01aec832.js";import{_ as T}from"./index-747e11ee.js";const z={class:"events"},B={class:"events"},C={class:"events"},F=Vue.defineComponent({setup(M){g([$,w,A,L,N,k,E,S,I]);const f=x(),n=f.params.id,o=f.params.stream,i={trigger:"axis",axisPointer:{type:"line",animation:!1,axis:"x",label:{show:!0,formatter:({value:a})=>new Date(a).toLocaleTimeString(),backgroundColor:"rgba(50,50,50,0.7)"}}},r={showSymbol:!1,smooth:!0,type:"line",lineStyle:{width:1}},_=Vue.ref(0),l={type:"time",min:_,splitLine:{show:!1}},u=[{id:"dataZoomX",type:"slider",xAxisIndex:[0],filterMode:"filter"}],m=Vue.reactive({title:{text:o,left:"1%"},dataZoom:u,tooltip:i,xAxis:l,yAxis:[{name:"码率kbps",type:"value"},{name:"event",type:"value",min:0,max:100,show:!1,splitNumber:2,splitLine:{show:!1}}],series:[]}),v=Vue.reactive({tooltip:i,xAxis:l,dataZoom:u,yAxis:{name:"帧率fps",type:"value"},series:[]}),h=Vue.reactive({tooltip:i,xAxis:l,dataZoom:u,yAxis:{name:"缓冲大小",type:"value"},series:[]});return y(n,o+"/stream.yaml").then(a=>{const s=d.parse(a);_.value=s[0].time,m.series.push({yAxisIndex:1,type:"scatter",data:s.map(e=>[e.time,100]),labelLayout:{moveOverlap:"shiftY"},tooltip:{trigger:"item",formatter:({data:e})=>`${e.event}<br/>${new Date(e.time).toLocaleTimeString()}`},markLine:{lineStyle:{type:"dashed"},data:s.map(e=>[{coord:[e.time,0],symbol:"none"},{coord:[e.time,90],symbol:"circle",name:e.event}])}})}),b(n,o).then(a=>{d.parse(a).forEach((e,Y)=>{y(n,o+`/track/${e}.yaml`).then(V=>{const p=d.parse(V);m.series.push({yAxisIndex:0,name:e,...r,data:p.map(t=>({value:[t.time,t.bps>>10]}))}),v.series.push({name:e,...r,data:p.map(t=>({value:[t.time,t.fps]}))}),h.series.push({name:e,...r,data:p.map(t=>({value:[t.time,t.rb]}))})})})}),(a,s)=>(Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createElementVNode("div",z,[Vue.createVNode(Vue.unref(c),{class:"chart",option:Vue.unref(m),autoresize:""},null,8,["option"])]),Vue.createElementVNode("div",B,[Vue.createVNode(Vue.unref(c),{class:"chart",option:Vue.unref(v),autoresize:""},null,8,["option"])]),Vue.createElementVNode("div",C,[Vue.createVNode(Vue.unref(c),{class:"chart",option:Vue.unref(h),autoresize:""},null,8,["option"])])]))}}),R=T(F,[["__scopeId","data-v-8e73e23e"]]);export{R as default};
|
||||
3
plugin/console/web/assets/detail-9a4f31c7.js
Normal file
@@ -0,0 +1,3 @@
|
||||
import{l as p}from"./vendor-ec30964e.js";import{s as i}from"./index-747e11ee.js";const V=Vue.defineComponent({setup(c){const{id:l,logName:u}=p().params,o=Vue.ref([]),t=Vue.ref("");i({url:"/logrotate/api/get/"+u,method:"post",headers:{m7sid:l}}).then(e=>{o.value=e.content.split(`
|
||||
`)});const r=Vue.computed(()=>o.value.filter(e=>e.includes(t.value)).join(`
|
||||
`));return(e,n)=>{const s=Vue.resolveComponent("n-input");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(s,{type:"text",value:t.value,"onUpdate:value":n[0]||(n[0]=a=>t.value=a),placeholder:"Filter logs"},null,8,["value"]),Vue.createElementVNode("pre",null,Vue.toDisplayString(Vue.unref(r)),1)])}}});export{V as default};
|
||||
1
plugin/console/web/assets/history-8962c6fe.js
Normal file
@@ -0,0 +1 @@
|
||||
import{i as d}from"./index-747e11ee.js";import{B as m}from"./TableAction-8944830d.js";import{s as p}from"./index-60c113a0.js";import{l as V}from"./vendor-ec30964e.js";const _=Vue.createTextVNode("搜索"),w=Vue.defineComponent({setup(F){const o=V().params.id,{t:e}=d.global,t=Vue.ref(),n=[{title:e("任务ID"),key:"id",width:80},{title:e("任务类型"),key:"type",width:80},{title:e("任务所属"),key:"owner",width:200},{title:e("任务开始时间"),key:"startTime",width:200},{title:e("任务结束时间"),key:"endTime",width:200},{title:e("任务关闭原因"),key:"reason",width:200},{title:e("任务描述"),key:"description"}];async function i(){t.value=await p(o,{})}return(r,B)=>{const a=Vue.resolveComponent("n-input"),u=Vue.resolveComponent("n-form-item"),l=Vue.resolveComponent("n-button"),s=Vue.resolveComponent("n-form");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(s,{inline:""},{default:Vue.withCtx(()=>[Vue.createVNode(u,null,{default:Vue.withCtx(()=>[Vue.createVNode(a,{placeholder:"请输入搜索内容"})]),_:1}),Vue.createVNode(u,null,{default:Vue.withCtx(()=>[Vue.createVNode(l,{type:"primary",onClick:i},{default:Vue.withCtx(()=>[_]),_:1})]),_:1})]),_:1}),Vue.createVNode(Vue.unref(m),{title:r.$t("任务历史记录"),columns:n,dataSource:t.value,pagination:!1,"row-key":c=>c.id,"scroll-x":1090},null,8,["title","dataSource","row-key"])])}}});export{w as default};
|
||||
1
plugin/console/web/assets/index-01735392.css
Normal file
@@ -0,0 +1 @@
|
||||
.view-account[data-v-841a25ca]{display:flex;flex-direction:column;height:100vh;overflow:auto}.view-account-container[data-v-841a25ca]{flex:1;padding:32px 0;width:384px;margin:0 auto}.view-account-top[data-v-841a25ca]{padding:32px 0;text-align:center}.view-account-top-logo[data-v-841a25ca]{display:flex;align-items:center;justify-content:center;height:64px;line-height:64px;overflow:hidden;white-space:nowrap}.view-account-top-logo img[data-v-841a25ca]{width:auto;height:32px}.view-account-top-logo .title[data-v-841a25ca]{font-size:18px;margin-bottom:0;margin-left:5px}.view-account-top-desc[data-v-841a25ca]{font-size:14px;color:#808695}.view-account-other[data-v-841a25ca]{width:100%}.view-account .default-color[data-v-841a25ca],.view-account .default-color .ant-checkbox-wrapper[data-v-841a25ca]{color:#515a6e}@media (min-width: 768px){.view-account[data-v-841a25ca]{background-image:url(./login-bg-7b57ab51.svg);background-repeat:no-repeat;background-position:50%;background-size:100%}.page-account-container[data-v-841a25ca]{padding:32px 0 24px}}
|
||||
134
plugin/console/web/assets/index-01aec832.js
Normal file
1
plugin/console/web/assets/index-02040a65.css
Normal file
@@ -0,0 +1 @@
|
||||
.n-gradient-text[data-v-541c4362]{font-size:24px}
|
||||
1
plugin/console/web/assets/index-03d598c7.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as y}from"./check-912be29a.js";import{c as C}from"./index-60c113a0.js";import{m as D,l as N}from"./vendor-ec30964e.js";import{Y as k}from"./index-01aec832.js";import{_ as g}from"./index-747e11ee.js";const h={key:0,class:"query-bar"},w=Vue.createTextVNode("今天"),x=Vue.createTextVNode("昨天"),B=Vue.createTextVNode("查询"),F=Vue.defineComponent({setup(E){const n=Vue.ref(!1),l=D(),i=N().params.id,o=Vue.ref(""),u=Vue.ref([Date.now(),Date.now()]),r=Vue.ref([]);function s(){u.value=[Date.now(),Date.now()]}function d(){u.value=[Date.now()-24*3600*1e3,Date.now()-24*3600*1e3]}function c(e){return new Date(e-new Date().getTimezoneOffset()*6e4).toISOString().replace(/\.[^\.]+Z/,"")}const p=()=>{C(i,o.value,u.value.join("-")).then(e=>{e=k.parse(e),e?r.value=e:r.value=[]})},m=[{title:"流名称",key:"path"},{title:"流创建时间",key:"time",render(e){return Vue.h("span",{},new Date(e.time).toLocaleString())}},{title:"操作",key:"action",render(e){return Vue.h(naive.NButton,{strong:!0,tertiary:!0,size:"small",onClick:()=>V(e)},{default:()=>"详情"})}}];function V(e){l.push({name:"monitor-detail",params:{stream:e.path+"/"+c(e.time)}})}return(e,t)=>{const _=Vue.resolveComponent("n-input"),v=Vue.resolveComponent("n-date-picker"),f=Vue.resolveComponent("n-data-table");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(y,{name:"Monitor",value:n.value,"onUpdate:value":t[0]||(t[0]=a=>n.value=a)},null,8,["value"]),n.value?Vue.createCommentVNode("",!0):(Vue.openBlock(),Vue.createElementBlock("div",h,[Vue.createVNode(_,{class:"input-field",placeholder:"输入流名称",value:o.value,"onUpdate:value":t[1]||(t[1]=a=>o.value=a),clearable:""},null,8,["value"]),Vue.createVNode(Vue.unref(naive.NButton),{onClick:s},{default:Vue.withCtx(()=>[w]),_:1}),Vue.createVNode(Vue.unref(naive.NButton),{onClick:d},{default:Vue.withCtx(()=>[x]),_:1}),Vue.createVNode(v,{class:"input-field",placeholder:"选择日期范围",value:u.value,"onUpdate:value":t[2]||(t[2]=a=>u.value=a),type:"daterange","range-separator":"至",format:"yyyy-MM-dd",clearable:""},null,8,["value"]),Vue.createVNode(Vue.unref(naive.NButton),{type:"primary",onClick:p},{default:Vue.withCtx(()=>[B]),_:1})])),Vue.createVNode(f,{columns:m,data:r.value,pagination:{pageSize:10,showSizePicker:!0},bordered:!1},null,8,["data"])])}}}),M=g(F,[["__scopeId","data-v-54f3aa7d"]]);export{M as default};
|
||||
1
plugin/console/web/assets/index-12bc2ddc.css
Normal file
@@ -0,0 +1 @@
|
||||
.btn[data-v-3d86ca19]{width:100px}
|
||||
1
plugin/console/web/assets/index-2325476e.css
Normal file
@@ -0,0 +1 @@
|
||||
.top[data-v-4b5c61c2]{display:flex}.n-gradient-text[data-v-4b5c61c2]{font-size:24px}
|
||||
1
plugin/console/web/assets/index-28f01ea7.css
Normal file
@@ -0,0 +1 @@
|
||||
.title[data-v-74a4cd9b]{font-size:20px;font-weight:500;margin-bottom:20px}.page[data-v-74a4cd9b]{position:relative}.page .action[data-v-74a4cd9b]{position:sticky;top:120px}.page .jsonEditor[data-v-74a4cd9b]{width:55vw;min-height:80vh}.page .pre[data-v-74a4cd9b]{width:70vw;height:80vh}
|
||||
1
plugin/console/web/assets/index-3ea6ef98.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as B,i as C,r as v,b as F}from"./index-747e11ee.js";import{K as E}from"./vendor-ec30964e.js";const i=u=>(Vue.pushScopeId("data-v-841a25ca"),u=u(),Vue.popScopeId(),u),h={class:"view-account"},D=i(()=>Vue.createElementVNode("div",{class:"view-account-header"},null,-1)),g={class:"view-account-container"},N=i(()=>Vue.createElementVNode("div",{class:"view-account-top"},[Vue.createElementVNode("div",{class:"view-account-top-logo"},[Vue.createElementVNode("img",{src:F,alt:""}),Vue.createElementVNode("h2",{class:"title"},"Monibuca")])],-1)),w={class:"view-account-form"},x={class:"view-account-top-desc"},b=Vue.defineComponent({setup(u){const{t:n}=C.global,s=Vue.ref(),c=naive.useMessage(),d=Vue.ref(!1),t=Vue.reactive({mail:""}),V={mail:{required:!0,message:n("请输入邮箱"),trigger:"blur"}},_=e=>{e.preventDefault(),s.value.validate(async o=>{if(o)c.error(n("重置密码失败,请稍后再试"));else{const{mail:a}=t;v({mail:a}).then(()=>{c.info(n("重置密码成功,请登录邮箱查看重置密码,并进行激活"))})}})};return(e,o)=>{const a=Vue.resolveComponent("n-icon"),r=Vue.resolveComponent("n-input"),l=Vue.resolveComponent("n-form-item"),m=Vue.resolveComponent("n-button"),p=Vue.resolveComponent("n-form");return Vue.openBlock(),Vue.createElementBlock("div",h,[D,Vue.createElementVNode("div",g,[N,Vue.createElementVNode("div",w,[Vue.createVNode(p,{ref_key:"formRef",ref:s,"label-placement":"left",size:"large",model:Vue.unref(t),rules:V},{default:Vue.withCtx(()=>[Vue.createVNode(l,{path:"mail"},{default:Vue.withCtx(()=>[Vue.createVNode(r,{value:Vue.unref(t).mail,"onUpdate:value":o[0]||(o[0]=f=>Vue.unref(t).mail=f),placeholder:e.$t("请输入邮箱")},{prefix:Vue.withCtx(()=>[Vue.createVNode(a,{size:"18",color:"#808695"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(E))]),_:1})]),_:1},8,["value","placeholder"])]),_:1}),Vue.createVNode(l,null,{default:Vue.withCtx(()=>[Vue.createVNode(m,{type:"primary",onClick:_,size:"large",loading:d.value,block:""},{default:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(e.$t("重置密码")),1)]),_:1},8,["loading"])]),_:1}),Vue.createElementVNode("div",x,Vue.toDisplayString(e.$t("点击重置密码后,请到绑定邮箱中查看重置密码,并点击链接进行激活")),1)]),_:1},8,["model"])])])])}}}),S=B(b,[["__scopeId","data-v-841a25ca"]]);export{S as default};
|
||||
1
plugin/console/web/assets/index-443e57dd.css
Normal file
@@ -0,0 +1 @@
|
||||
.page{padding:10px 0 15px;display:flex;align-items:center}.page .name{padding:0 15px;font-weight:700;color:#000}.page .select{width:100px;color:#000}
|
||||
1
plugin/console/web/assets/index-470263d7.js
Normal file
@@ -0,0 +1 @@
|
||||
import{l as V,m as k}from"./vendor-ec30964e.js";import{T as y,B as w}from"./TableAction-8944830d.js";import{_ as v}from"./index-93eb0e35.js";import{i as c,_ as x}from"./index-747e11ee.js";import{c as $}from"./index-60c113a0.js";const{t:n}=c.global;function u(t){return t=t<<3,t>1024*1024?(t/1024/1024).toFixed(2)+" mb/s":t>1024?(t/1024).toFixed(2)+" kb/s":t.toString()+" b/s"}const C=[{title:"StreamPath",key:"path",width:100},{title:n("类型"),key:"type",width:40},{title:n("订阅者"),key:"subscribers",width:50},{title:n("开始时间"),key:"startTime",width:50,render(t){return Vue.h(naive.NTime,{time:new Date(t.startTime),type:"relative"})}},{title:n("状态"),width:30,key:"state"},{title:n("音频"),key:"audio",width:100,render(t){const e=t.audioTrack;return Vue.h("text",e?`${e.codec},${e.fps}f/s,${e.sampleRate}Hz,${u(e.bps)}`:"无")}},{title:n("视频"),key:"video",width:100,render(t){const e=t.videoTrack;return Vue.h("text",e?`${e.codec},${e.fps}f/s,${e.width}x${e.height},${u(e.bps)}`:"无")}}];const b=Vue.defineComponent({setup(t){const{t:e}=c.global,s=V(),l=k(),{params:d}=s,r=d.id,i=Vue.ref([]),m=Vue.reactive({width:100,title:e("操作"),key:"action",fixed:"right",render(o){return Vue.h(y,{style:"button",actions:[{label:e("详情"),type:"primary",onClick:()=>l.push(`./detail/${r}/${o.path}`)}]})}});async function f(o){const a=await $(r);i.value=a.list}function p(o){console.log(o)}return(o,a)=>{const _=Vue.resolveComponent("n-card");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(Vue.unref(v),{onTick:f}),Vue.createVNode(_,{bordered:!1,class:"proCard"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(w),{title:o.$t("流列表"),columns:Vue.unref(C),dataSource:i.value,pagination:!1,"row-key":h=>h.id,actionColumn:Vue.unref(m),"onUpdate:checkedRowKeys":p,"scroll-x":1090},null,8,["title","columns","dataSource","row-key","actionColumn"])]),_:1})])}}}),D=x(b,[["__scopeId","data-v-4b5c61c2"]]);export{D as default};
|
||||
1
plugin/console/web/assets/index-48571458.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as y}from"./check-912be29a.js";import{p as s}from"./index-60c113a0.js";import{l as g}from"./vendor-ec30964e.js";import"./index-747e11ee.js";const x={style:{padding:"24px",display:"flex"}},E=Vue.createTextVNode("查看内存信息"),w=Vue.createTextVNode("下载内存信息"),F=Vue.createTextVNode("查看CPU信息"),N=Vue.createTextVNode("下载CPU信息"),k=Vue.createElementVNode("div",{style:{"font-size":"12px"}},"CPU数据采集时长区间: 1~99 秒, 不填默认5秒",-1),B={style:{padding:"24px 24px 24px 24px"}},P=["innerHTML"],U=["src"],T=Vue.defineComponent({setup(L){const{id:p,path:f}=g().params,m=Vue.ref(!1),c=Vue.ref(""),V=Vue.ref(null),v=Vue.ref(null),i=Vue.ref("");f?c.value="":s(p,"/debug/pprof/").then(t=>{c.value=t.replace(/href="(.+)"/g,`href="${location.href}/$1"`).replace(/href='(.+)'/g,`href="${location.href}/$1"`)});const _=()=>{s(p,"/debug/pprof/heap").then(t=>{console.log("res.data.port is "+t.data.port),c.value="",i.value="http://console.monibuca.com"+t.data.port})},h=()=>{var t=V.value||5;s(p,"/debug/pprof/profile?seconds="+t).then(e=>{console.log("res.data.port is "+e.data.port),c.value="",i.value="http://console.monibuca.com"+e.data.port})},C=()=>{s(p,"d/debug/pprof/heap").then(t=>{for(var e=atob(t.data.file),o=new Uint8Array(e.length),n=0;n<e.length;n++)o[n]=e.charCodeAt(n);var u=new Blob([o],{type:"application/octet-stream"}),l=URL.createObjectURL(u),r=document.createElement("a");r.href=l,r.download="mempprof",r.click(),URL.revokeObjectURL(l)})},b=()=>{var t=v.value||5;s(p,"d/debug/pprof/profile?seconds="+t).then(e=>{for(var o=atob(e.data.file),n=new Uint8Array(o.length),u=0;u<o.length;u++)n[u]=o.charCodeAt(u);var l=new Blob([n],{type:"application/octet-stream"}),r=URL.createObjectURL(l),d=document.createElement("a");d.href=r,d.download="cpupprof",d.click(),URL.revokeObjectURL(r)})};return(t,e)=>{const o=Vue.resolveComponent("n-button"),n=Vue.resolveComponent("n-button-group"),u=Vue.resolveComponent("n-input-number"),l=Vue.resolveComponent("n-input-group"),r=Vue.resolveComponent("n-space"),d=Vue.resolveComponent("n-layout");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(d,null,{default:Vue.withCtx(()=>[Vue.createElementVNode("div",x,[Vue.createVNode(n,null,{default:Vue.withCtx(()=>[Vue.createVNode(o,{type:"primary",style:{"margin-bottom":"30px","margin-right":"20px"},onClick:e[0]||(e[0]=a=>_())},{default:Vue.withCtx(()=>[E]),_:1}),Vue.createVNode(o,{type:"primary",secondary:"",style:{"margin-bottom":"30px","margin-right":"20px"},onClick:e[1]||(e[1]=a=>C())},{default:Vue.withCtx(()=>[w]),_:1})]),_:1}),Vue.createVNode(r,{vertical:"",style:{display:"inline-flex","margin-right":"20px"}},{default:Vue.withCtx(()=>[Vue.createVNode(l,null,{default:Vue.withCtx(()=>[Vue.createVNode(u,{"show-button":!1,style:{width:"180px"},value:V.value,"onUpdate:value":e[2]||(e[2]=a=>V.value=a),min:1,max:99,placeholder:"请输入CPU数据采集时长"},null,8,["value"]),Vue.createVNode(o,{type:"primary",onClick:e[3]||(e[3]=a=>h())},{default:Vue.withCtx(()=>[F]),_:1}),Vue.createVNode(o,{type:"primary",secondary:"",onClick:e[4]||(e[4]=a=>b())},{default:Vue.withCtx(()=>[N]),_:1})]),_:1}),k]),_:1})]),Vue.createElementVNode("div",B,[Vue.createVNode(y,{name:"Debug",value:m.value,"onUpdate:value":e[5]||(e[5]=a=>m.value=a)},null,8,["value"]),m.value?Vue.createCommentVNode("",!0):(Vue.openBlock(),Vue.createElementBlock("div",{key:0,innerHTML:c.value},null,8,P)),i.value?(Vue.openBlock(),Vue.createElementBlock("iframe",{key:1,src:i.value,width:"100%",height:"800"},null,8,U)):Vue.createCommentVNode("",!0)])]),_:1})])}}});export{T as default};
|
||||
1
plugin/console/web/assets/index-49218380.css
Normal file
1
plugin/console/web/assets/index-495539b8.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as r}from"./index-93eb0e35.js";import{t as s}from"./index-60c113a0.js";import{l as c}from"./vendor-ec30964e.js";import"./index-747e11ee.js";const f=Vue.defineComponent({setup(u){c().params.id;const n=Vue.ref();function a(e){var t;return{key:e.id,label:`${e.description?JSON.stringify(e.description):""}`,children:(t=e.children)==null?void 0:t.map(a),prefix:()=>Vue.h(naive.NSpace,{},[Vue.h(naive.NTag,{type:"info",size:"small"},e.id),Vue.h(naive.NTag,{type:"success",size:"small"},e.owner),Vue.h(naive.NTime,{time:new Date(e.startTime),type:"relative"})])}}async function i(){const e=await s();n.value=[a(e)]}return(e,t)=>{const o=Vue.resolveComponent("n-tree");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(Vue.unref(r),{onTick:i}),Vue.createVNode(o,{"default-expand-all":"","show-line":"",data:n.value},null,8,["data"])])}}});export{f as default};
|
||||
1
plugin/console/web/assets/index-60c113a0.js
Normal file
@@ -0,0 +1 @@
|
||||
import{s as e,o as c}from"./index-747e11ee.js";function h(t){return e({url:"/api/instance/list",method:"post",data:t})}function m(t){return e({url:"/api/instance/add",method:"post",data:t})}function f(t){return e({url:"/api/instance/update",method:"post",data:t})}function g(t){return e({url:"/api/instance/del",method:"post",data:t})}function S(t){return new EventSource(c+"/api/summary/sse?m7sid="+t)}function $(t){return e({url:"/api/stream/list",method:"post",headers:{m7sid:t}})}function P(t,s){return e({url:`/api/subscribers/${s}`,method:"post",headers:{m7sid:t}})}function d(t){return e({url:"/api/sysinfo"})}function b(t,s){return e({url:`/api/stream/info/${s}`,method:"post",headers:{m7sid:t}})}function y(t,s){const r=`/api/stream/annexb/${s}`;return e({url:r,responseType:"arraybuffer"})}function k(t,s,r){const n=`/api/${r}track/snap/${s}`;return e({url:n})}function I(t,s="global",r=!1){return e({url:`/api/config/${r?"json":"get"}/${s}`,method:"post",headers:{m7sid:t}})}async function M(t,s,r,n="http"){const{localIP:a}=await d(),{ip:o}=await e({url:"/api/instance/detail",method:"post",data:{id:t}}),u=await e({url:"/api/config/json/global",method:"post",headers:{m7sid:t}}),{listenaddr:i,listenaddrtls:p}=u.http;return`${n}${r?"s":""}://${s?a:o}${r?p:i}`}function T(t,s,r="global"){return e({url:`/api/config/modify/${r}`,method:"post",headers:{m7sid:t},data:s})}function L(t){return e({url:"/api/plugins",method:"post",headers:{m7sid:t}})}function w(t){return e({url:"/logrotate/api/list",method:"post",headers:{m7sid:t}})}function x(t,s){return e({url:"/monitor/api/list/track?"+new URLSearchParams({streamPath:s}),method:"post",headers:{m7sid:t}})}function C(t,s){return e({url:"/monitor/"+s,method:"post",headers:{m7sid:t}})}function H(t,s){return e({url:"/api/startDebug",method:"post",headers:{m7sid:t,path:s}})}function O(t,s){return e({url:`/stress/api/pull/${s.protocol}/${s.pullCount}`,method:"post",headers:{m7sid:t,"M7s-Method":"POST"},data:{remoteURL:s.remoteURL}})}function j(t,s){return e({url:`/stress/api/push/${s.protocol}/${s.pushCount}`,method:"post",headers:{m7sid:t,"M7s-Method":"POST"},data:{remoteHost:s.remoteHost,streamPath:s.streamPath}})}function v(t){return e({url:"/stress/api/stop/push",method:"post",headers:{m7sid:t,"M7s-Method":"POST"}})}function R(t){return e({url:"/stress/api/stop/pull",method:"post",headers:{m7sid:t,"M7s-Method":"POST"}})}function U(t){return e({url:"/stress/api/count",method:"post",headers:{m7sid:t}})}function D(t){return e({url:"/api/task/tree"})}function E(t,s){return e({url:"/monitor/api/search/task",method:"post",data:s})}export{S as a,I as b,$ as c,b as d,y as e,k as f,d as g,P as h,w as i,M as j,C as k,x as l,T as m,j as n,O as o,H as p,U as q,v as r,E as s,D as t,R as u,L as v,h as w,g as x,m as y,f as z};
|
||||
1
plugin/console/web/assets/index-72306053.js
Normal file
1
plugin/console/web/assets/index-747e11ee.js
Normal file
1
plugin/console/web/assets/index-79078714.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as F,i as E,u as N,a as y,P as S}from"./index-747e11ee.js";import{m as k,l as x,K as b,N as A}from"./vendor-ec30964e.js";const D=""+new URL("../guide.png",import.meta.url).href;const R=n=>(Vue.pushScopeId("data-v-4051bd7c"),n=n(),Vue.popScopeId(),n),I={class:"view-account"},P=R(()=>Vue.createElementVNode("div",{class:"view-account-header"},null,-1)),$={class:"view-account-container"},U={class:"view-account-top"},z={class:"view-account-top-logo"},q={class:"view-account-top-desc"},O={class:"view-account-form"},j={class:"flex view-account-other"},L={class:"flex-initial",style:{"margin-left":"auto"}},M={key:0,src:D,width:"300"},T=Vue.defineComponent({setup(n){const{t:c}=E.global,_=Vue.ref(),l=naive.useMessage(),s=Vue.ref(!1),u=Vue.reactive({mail:"",password:"",isCaptcha:!0}),v={mail:{required:!0,message:c("请输入邮箱"),trigger:"blur"},password:{required:!0,message:c("请输入密码"),trigger:"blur"}},C=N(),i=y(),d=k(),h=x(),f=()=>{_.value.validate(async e=>{var t;if(e)l.error("请填写完整信息,并且进行验证码校验");else{const{mail:V,password:a}=u;s.value=!0;const r={mail:V,password:a};try{const o=await C.login(r);if(l.destroyAll(),o.code==0){const p=decodeURIComponent(((t=h.query)==null?void 0:t.redirect)||"/");l.success(c("登录成功")),d.replace(p)}}catch{s.value=!1}finally{s.value=!1}}})};function w(){d.push({name:S.BASE_REGISTER_NAME})}function g(){d.push({name:"root_password"})}return document.onkeydown=function(e){e.key=="Enter"&&f()},(e,t)=>{const V=Vue.resolveComponent("svg-icon"),a=Vue.resolveComponent("n-icon"),r=Vue.resolveComponent("n-input"),o=Vue.resolveComponent("n-form-item"),p=Vue.resolveComponent("n-button"),B=Vue.resolveComponent("n-form");return Vue.openBlock(),Vue.createElementBlock("div",I,[P,Vue.createElementVNode("div",$,[Vue.createElementVNode("div",U,[Vue.createElementVNode("div",z,[Vue.createVNode(V,{name:"logo",width:"256px"})]),Vue.createElementVNode("div",q,Vue.toDisplayString(Vue.unref(i).isSaas?e.$t("实例管理平台"):"实例管理平台(私有化体验版)"),1)]),Vue.createElementVNode("div",O,[Vue.createVNode(B,{ref_key:"formRef",ref:_,"label-placement":"left",size:"large",model:Vue.unref(u),rules:v},{default:Vue.withCtx(()=>[Vue.createVNode(o,{path:"mail"},{default:Vue.withCtx(()=>[Vue.createVNode(r,{value:Vue.unref(u).mail,"onUpdate:value":t[0]||(t[0]=m=>Vue.unref(u).mail=m),placeholder:e.$t("请输入账号")},{prefix:Vue.withCtx(()=>[Vue.createVNode(a,{size:"18",color:"#808695"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(b))]),_:1})]),_:1},8,["value","placeholder"])]),_:1}),Vue.createVNode(o,{path:"password"},{default:Vue.withCtx(()=>[Vue.createVNode(r,{value:Vue.unref(u).password,"onUpdate:value":t[1]||(t[1]=m=>Vue.unref(u).password=m),type:"password",showPasswordOn:"click",placeholder:e.$t("请输入密码")},{prefix:Vue.withCtx(()=>[Vue.createVNode(a,{size:"18",color:"#808695"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(A))]),_:1})]),_:1},8,["value","placeholder"])]),_:1}),Vue.createVNode(o,null,{default:Vue.withCtx(()=>[Vue.createVNode(p,{type:"primary",onClick:f,size:"large",loading:s.value,block:""},{default:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(e.$t("登录")),1)]),_:1},8,["loading"])]),_:1}),Vue.unref(i).isSaas?(Vue.openBlock(),Vue.createBlock(o,{key:0,class:"default-color"},{default:Vue.withCtx(()=>[Vue.createElementVNode("div",j,[Vue.createElementVNode("div",L,[Vue.createElementVNode("a",{onClick:w},Vue.toDisplayString(e.$t("注册账号")),1),Vue.createElementVNode("a",{style:{"margin-left":"20px"},onClick:g},Vue.toDisplayString(e.$t("忘记密码")),1)])])]),_:1})):Vue.createCommentVNode("",!0)]),_:1},8,["model"])])]),Vue.unref(i).isSaas?(Vue.openBlock(),Vue.createElementBlock("img",M)):Vue.createCommentVNode("",!0)])}}}),H=F(T,[["__scopeId","data-v-4051bd7c"]]);export{H as default};
|
||||
11
plugin/console/web/assets/index-81e0805c.js
Normal file
1
plugin/console/web/assets/index-83ad10fa.js
Normal file
@@ -0,0 +1 @@
|
||||
import{i as C,j as c}from"./index-60c113a0.js";import{T as v,B as x}from"./TableAction-8944830d.js";import{i as F,c as b}from"./index-747e11ee.js";import{l as k}from"./vendor-ec30964e.js";const N=Vue.createTextVNode(" 全文搜索 "),D=Vue.createTextVNode(" 实时跟踪 "),I=Vue.defineComponent({setup(B){const{t:n}=F.global,a=Vue.ref(""),l=Vue.ref(""),s=Vue.ref(!0),o=k().params.id,i=Vue.ref([]),p=Vue.computed(()=>a.value?i.value.filter(e=>e.name.indexOf(a.value)!=-1):i.value);function d(e,t=""){const u={"":"K",K:"M",M:"G",G:null};return e>1024&&u[t]?d(e/1024,u[t]):(e||0).toFixed(2).replace(".00","")+t+"B"}const V=[{title:()=>Vue.h("div",[n("名称"),Vue.h(naive.NInput,{placeholder:n("按名称过滤"),size:"small",style:{width:"85%"},onUpdateValue(e){a.value=e}})]),key:"name",width:100},{title:n("大小"),width:100,render(e){return Vue.h("text",d(+e.size))}}];C(o).then(e=>{i.value=(e==null?void 0:e.files)||[],s.value=!1});async function m(e){b.push({name:"instance_log_detail",params:{id:o,logName:e.name}})}async function f(e){const t=await c(o,!0,!1);window.open(`${t}/logrotate/api/download?file=${encodeURI(e.name)}`)}async function y(){const e=await c(o,!0,!1);window.open(`${e}/logrotate/api/find?query=${l.value}`)}async function _(){const e=await c(o,!0,!1);window.open(`${e}/logrotate/api/tail`)}const w=Vue.reactive({width:220,title:n("操作"),key:"action",render(e){return Vue.h(v,{style:"button",actions:[{label:n("打开"),type:"primary",icon:"ic:outline-delete-outline",onClick:m.bind(null,e)},{label:n("下载"),type:"primary",icon:"ic:outline-delete-outline",onClick:f.bind(null,e)}]})}});return(e,t)=>{const u=Vue.resolveComponent("n-button"),g=Vue.resolveComponent("n-layout-content"),h=Vue.resolveComponent("n-layout");return Vue.openBlock(),Vue.createBlock(h,null,{default:Vue.withCtx(()=>[Vue.createVNode(g,{"content-style":"padding: 24px;"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(x),{title:e.$t("日志文件列表"),class:"table",loading:s.value,"row-class-name":"row",columns:V,dataSource:Vue.unref(p),pagination:{simple:!0},actionColumn:Vue.unref(w),"row-key":r=>r.name,"scroll-x":1090},{toolbar:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(naive.NInput),{value:l.value,"onUpdate:value":t[0]||(t[0]=r=>l.value=r),style:{"margin-right":"10px"}},null,8,["value"]),Vue.createVNode(u,{"attr-type":"button",onClick:y,style:{"margin-right":"10px"}},{default:Vue.withCtx(()=>[N]),_:1}),Vue.createVNode(u,{"attr-type":"button",onClick:_},{default:Vue.withCtx(()=>[D]),_:1})]),_:1},8,["title","loading","dataSource","actionColumn","row-key"])]),_:1})]),_:1})}}});export{I as default};
|
||||
1
plugin/console/web/assets/index-8cf1f035.css
Normal file
@@ -0,0 +1 @@
|
||||
.view-account[data-v-4051bd7c]{display:flex;flex-direction:column;height:100vh;overflow:auto}.view-account>img[data-v-4051bd7c]{margin:auto}.view-account-container[data-v-4051bd7c]{flex:1;padding:32px 0;width:384px;margin:0 auto}.view-account-top[data-v-4051bd7c]{padding:32px 0;text-align:center}.view-account-top-logo[data-v-4051bd7c]{display:flex;align-items:center;justify-content:center;overflow:hidden;white-space:nowrap}.view-account-top-logo img[data-v-4051bd7c]{width:auto;height:auto}.view-account-top-logo .title[data-v-4051bd7c]{font-size:18px;margin-bottom:0;margin-left:5px}.view-account-top-desc[data-v-4051bd7c]{font-size:24px;color:#808695}.view-account-other[data-v-4051bd7c]{width:100%}.view-account .default-color[data-v-4051bd7c]{color:#515a6e}.view-account .default-color .flex-initial a[data-v-4051bd7c]{cursor:pointer}.view-account .default-color .ant-checkbox-wrapper[data-v-4051bd7c]{color:#515a6e}@media (min-width: 768px){.view-account[data-v-4051bd7c]{background-image:url(./login-bg-7b57ab51.svg);background-repeat:no-repeat;background-position:50%;background-size:100%}.page-account-container[data-v-4051bd7c]{padding:32px 0 24px}}
|
||||
1
plugin/console/web/assets/index-8f977d17.css
Normal file
@@ -0,0 +1 @@
|
||||
.query-bar[data-v-54f3aa7d]{display:flex;align-items:left;justify-content:space-between;padding:16px;background-color:#f7f7f7}.input-field[data-v-54f3aa7d]{width:400px}
|
||||
1
plugin/console/web/assets/index-93eb0e35.js
Normal file
@@ -0,0 +1 @@
|
||||
import{i as V}from"./index-747e11ee.js";import{O as _}from"./vendor-ec30964e.js";const f={class:"page"},g=Vue.defineComponent({props:{esURL:String},emits:["tick"],setup(c,{emit:l}){const v=c,{t:m}=V.global,u=localStorage.getItem("interval"),t=Vue.ref(Math.min(4,u?Number(u):4)),s=Vue.ref(!0);let e;Vue.ref([{label:m("关闭"),value:0},{label:"1s",value:1},{label:"2s",value:2},{label:"5s",value:5},{label:"10s",value:10}]);let r;const o=()=>clearInterval(r);return Vue.watchEffect(()=>{s.value?(o(),localStorage.setItem("interval",String(t.value)),t.value&&(r=setInterval(()=>l("tick"),[0,1,2,5,10][t.value]*1e3)),e==null||e.close()):(o(),e=new EventSource(v.esURL),e.onmessage=n=>{l("tick",JSON.parse(n.data))})}),Vue.onMounted(()=>{l("tick"),Vue.onUnmounted(o)}),_(()=>{e==null||e.close()}),(n,a)=>{const p=Vue.resolveComponent("n-slider"),d=Vue.resolveComponent("n-button");return Vue.openBlock(),Vue.createElementBlock("div",f,[Vue.createVNode(p,{value:t.value,"onUpdate:value":a[0]||(a[0]=i=>t.value=i),min:0,max:4,marks:{0:n.$t("关闭"),1:"1s",2:"2s",3:"5s",4:"10s"},step:"mark",style:{width:"150px"}},null,8,["value","marks"]),Vue.createVNode(d,{disabled:!s.value,onClick:a[1]||(a[1]=i=>l("tick"))},{default:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(n.$t("立即刷新")),1)]),_:1},8,["disabled"])])}}});export{g as _};
|
||||
1
plugin/console/web/assets/index-983a54b8.css
Normal file
@@ -0,0 +1 @@
|
||||
.jsonEditor[data-v-2df35383]{min-height:80vh}.pre[data-v-2df35383]{width:auto}
|
||||
1
plugin/console/web/assets/index-98f28a2d.js
Normal file
@@ -0,0 +1 @@
|
||||
import{l as u,m as a}from"./vendor-ec30964e.js";const c=Vue.defineComponent({name:"Redirect",setup(){const t=u(),o=a();return Vue.onBeforeMount(()=>{const{params:r,query:n}=t,{path:e}=r;o.replace({path:"/"+(Array.isArray(e)?e.join("/"):e),query:n})}),()=>Vue.createVNode(naive.NEmpty,null,null)}});export{c as default};
|
||||
1
plugin/console/web/assets/index-9d16768b.js
Normal file
1
plugin/console/web/assets/index-a874ad7c.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as x,i as A,P as b,u as D,g as S,b as I}from"./index-747e11ee.js";import{m as R,l as k,K as B,N as $}from"./vendor-ec30964e.js";const E=c=>(Vue.pushScopeId("data-v-b6411e00"),c=c(),Vue.popScopeId(),c),z={class:"view-account"},P=E(()=>Vue.createElementVNode("div",{class:"view-account-header"},null,-1)),T={class:"view-account-container"},U={class:"view-account-top"},q=E(()=>Vue.createElementVNode("div",{class:"view-account-top-logo"},[Vue.createElementVNode("img",{src:I,alt:""}),Vue.createElementVNode("h2",{class:"title"},"Monibuca")],-1)),M={class:"view-account-top-desc"},O={class:"view-account-form"},G=Vue.defineComponent({setup(c){const{t:a}=A.global,V=Vue.ref(!1),p=Vue.ref(a("发送邮箱验证码")),i=Vue.ref(60),_=Vue.ref(),r=naive.useMessage(),f=Vue.ref(!1),h=b.BASE_REGISTER_NAME,e=Vue.reactive({password:"",mail:"",verifycode:""}),w={mail:{required:!0,message:a("请输入邮箱"),trigger:"blur"},password:{required:!0,message:a("请输入密码"),trigger:"blur"},verifycode:{required:!0,message:a("请邮箱验证码"),trigger:"blur"}},F=D(),v=R(),C=k(),g=t=>{t.preventDefault(),_.value.validate(async u=>{var s;if(u)r.error("请填写正确信息");else{const{verifycode:l,password:n,mail:d}=e;r.loading("注册中..."),f.value=!0;const m={verifycode:l,password:n,mail:d};try{const o=await F.register(m);if(r.destroyAll(),o.code==0){const y=decodeURIComponent(((s=C.query)==null?void 0:s.redirect)||"/");r.success("注册成功,即将进入系统"),C.name===h?v.replace("/"):v.replace(y)}else r.info(o.msg||"登录失败")}finally{f.value=!1}}})};function N(){if(!e.mail)r.info(a("请输入邮箱验证码"));else{const t={mail:e.mail};S(t).then(()=>{r.info(a("验证码发送成功,请注意查收"));const u=setInterval(()=>{V.value=!0,p.value=`(${i.value}秒)后重新发送`,i.value--,i.value<0&&(clearInterval(u),p.value=a("发送邮箱验证码"),V.value=!1,i.value=10)},1e3)})}}return(t,u)=>{const s=Vue.resolveComponent("n-icon"),l=Vue.resolveComponent("n-input"),n=Vue.resolveComponent("n-form-item"),d=Vue.resolveComponent("n-button"),m=Vue.resolveComponent("n-form");return Vue.openBlock(),Vue.createElementBlock("div",z,[P,Vue.createElementVNode("div",T,[Vue.createElementVNode("div",U,[q,Vue.createElementVNode("div",M,Vue.toDisplayString(t.$t("实例管理平台")),1)]),Vue.createElementVNode("div",O,[Vue.createVNode(m,{ref_key:"formRef",ref:_,"label-placement":"left",size:"large",model:Vue.unref(e),rules:w},{default:Vue.withCtx(()=>[Vue.createVNode(n,{path:"mail"},{default:Vue.withCtx(()=>[Vue.createVNode(l,{value:Vue.unref(e).mail,"onUpdate:value":u[0]||(u[0]=o=>Vue.unref(e).mail=o),placeholder:t.$t("请输入邮箱帐号")},{prefix:Vue.withCtx(()=>[Vue.createVNode(s,{size:"18",color:"#808695"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(B))]),_:1})]),_:1},8,["value","placeholder"])]),_:1}),Vue.createVNode(n,{path:"verifycode"},{default:Vue.withCtx(()=>[Vue.createVNode(l,{value:Vue.unref(e).verifycode,"onUpdate:value":u[1]||(u[1]=o=>Vue.unref(e).verifycode=o),placeholder:t.$t("请输入邮箱验证码")},{prefix:Vue.withCtx(()=>[Vue.createVNode(s,{size:"18",color:"#808695"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(B))]),_:1})]),_:1},8,["value","placeholder"]),Vue.createVNode(d,{type:"success",onClick:N,disabled:V.value},{default:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(p.value),1)]),_:1},8,["disabled"])]),_:1}),Vue.createVNode(n,{path:"password"},{default:Vue.withCtx(()=>[Vue.createVNode(l,{value:Vue.unref(e).password,"onUpdate:value":u[2]||(u[2]=o=>Vue.unref(e).password=o),type:"password",showPasswordOn:"click",placeholder:t.$t("请输入密码")},{prefix:Vue.withCtx(()=>[Vue.createVNode(s,{size:"18",color:"#808695"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref($))]),_:1})]),_:1},8,["value","placeholder"])]),_:1}),Vue.createVNode(n,null,{default:Vue.withCtx(()=>[Vue.createVNode(d,{type:"primary",onClick:g,size:"large",loading:f.value,block:""},{default:Vue.withCtx(()=>[Vue.createTextVNode(Vue.toDisplayString(t.$t("注册")),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])])])}}}),j=x(G,[["__scopeId","data-v-b6411e00"]]);export{j as default};
|
||||
1
plugin/console/web/assets/index-ba7be148.css
Normal file
@@ -0,0 +1 @@
|
||||
.view-account[data-v-b6411e00]{display:flex;flex-direction:column;height:100vh;overflow:auto}.view-account-container[data-v-b6411e00]{flex:1;padding:32px 0;width:384px;margin:0 auto}.view-account-top[data-v-b6411e00]{padding:32px 0;text-align:center}.view-account-top-logo[data-v-b6411e00]{display:flex;align-items:center;justify-content:center;height:64px;line-height:64px;overflow:hidden;white-space:nowrap}.view-account-top-logo img[data-v-b6411e00]{width:auto;height:32px}.view-account-top-logo .title[data-v-b6411e00]{font-size:18px;margin-bottom:0;margin-left:5px}.view-account-top-desc[data-v-b6411e00]{font-size:14px;color:#808695}.view-account-other[data-v-b6411e00]{width:100%}.view-account .default-color[data-v-b6411e00],.view-account .default-color .ant-checkbox-wrapper[data-v-b6411e00]{color:#515a6e}@media (min-width: 768px){.view-account[data-v-b6411e00]{background-image:url(./login-bg-7b57ab51.svg);background-repeat:no-repeat;background-position:50%;background-size:100%}.page-account-container[data-v-b6411e00]{padding:32px 0 24px}}
|
||||
1
plugin/console/web/assets/index-bb06d8c1.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m as _,l as V}from"./vendor-ec30964e.js";import{T as y,B as g}from"./TableAction-8944830d.js";import{g as h}from"./index-60c113a0.js";import{_ as C}from"./index-747e11ee.js";const v=[{title:"名称",render(n){return n.enable===!1?Vue.h("div",[Vue.h("text",n.name),Vue.h(naive.NTag,{type:"primary"},"禁用")]):Vue.h("text",n.name)},width:100},{title:"版本",key:"version",width:200}];const k=Vue.defineComponent({setup(n){const a=_(),c=V(),{params:o}=c,i=naive.useMessage(),s=Vue.ref(),u=Vue.ref([]),r=Vue.reactive({width:220,title:"操作",key:"action",render(e){return Vue.h(y,{style:"button",actions:[{label:"配置",type:"primary",icon:"ic:outline-delete-outline",onClick:l.bind(null,e)}],select:t=>{i.info(`您点击了,${t} 按钮`)}})}});function l(e){const t=e.name;a.push({name:"instance_config",params:o,query:{name:t}})}async function d(){u.value=(await h(o.id)).plugins}d();function m(e){console.log(e)}return(e,t)=>{const f=Vue.resolveComponent("n-card");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(f,{bordered:!1,class:"proCard"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(g),{title:"插件列表",columns:Vue.unref(v),dataSource:u.value,"row-key":p=>p.id,pagination:!1,ref_key:"actionRef",ref:s,actionColumn:Vue.unref(r),"onUpdate:checkedRowKeys":m,"scroll-x":1090},null,8,["columns","dataSource","row-key","actionColumn"])]),_:1})])}}}),F=C(k,[["__scopeId","data-v-541c4362"]]);export{F as default};
|
||||
1
plugin/console/web/assets/index-c28fe5c9.js
Normal file
@@ -0,0 +1 @@
|
||||
import{l as D,Q as U}from"./vendor-ec30964e.js";import{n as P,o as B,q as A,r as g,u as E}from"./index-60c113a0.js";import{_ as H}from"./index-93eb0e35.js";import"./index-747e11ee.js";const L=Vue.defineComponent({setup(M){const n=naive.useMessage(),{id:a}=D().params,o=Vue.reactive({streamPath:"live/test",pushCount:0,remoteHost:"localhost",protocol:"rtmp"}),l=Vue.reactive({pullCount:0,remoteURL:"localhost/live/test",protocol:"rtmp"}),_=[{label:"rtmp://",value:"rtmp"},{label:"rtsp://",value:"rtsp"}],x=[{label:"rtmp",value:"rtmp"},{label:"rtsp",value:"rtsp"},{label:"http-flv",value:"hdl"}],d=Vue.ref(0),c=Vue.ref(0),s=Vue.ref(1e3),p=Vue.ref(1e3);function N(){g(a).then(e=>n.info(e)).catch(e=>n.error(e))}function F(){E(a).then(e=>n.info(e)).catch(e=>n.error(e))}U([o,l],()=>{o.pushCount?P(a,o).then(e=>n.info(e)).catch(e=>n.error(e)):N(),l.pullCount?B(a,l).then(e=>n.info(e)).catch(e=>n.error(e)):F()},{debounce:1e3});function w(){A(a).then(e=>{d.value=e.pushCount,c.value=e.pullCount})}return(e,u)=>{const V=Vue.resolveComponent("n-input"),r=Vue.resolveComponent("n-form-item"),m=Vue.resolveComponent("n-select"),i=Vue.resolveComponent("n-input-group"),v=Vue.resolveComponent("n-input-number"),f=Vue.resolveComponent("n-form"),C=Vue.resolveComponent("n-slider"),h=Vue.resolveComponent("n-card"),b=Vue.resolveComponent("n-space");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(Vue.unref(H),{onTick:w}),Vue.createVNode(b,null,{default:Vue.withCtx(()=>[Vue.createVNode(h,{title:"推送测试"},{"header-extra":Vue.withCtx(()=>[Vue.createTextVNode(" 正在推送数量: "+Vue.toDisplayString(d.value),1)]),action:Vue.withCtx(()=>[Vue.createVNode(C,{value:Vue.unref(o).pushCount,"onUpdate:value":u[4]||(u[4]=t=>Vue.unref(o).pushCount=t),max:s.value},null,8,["value","max"])]),default:Vue.withCtx(()=>[Vue.createVNode(f,{model:Vue.unref(o)},{default:Vue.withCtx(()=>[Vue.createVNode(r,{label:"本地流",path:"streamPath"},{default:Vue.withCtx(()=>[Vue.createVNode(V,{value:Vue.unref(o).streamPath,"onUpdate:value":u[0]||(u[0]=t=>Vue.unref(o).streamPath=t),placeholder:"输入流路径"},null,8,["value"])]),_:1}),Vue.createVNode(r,{label:"目标机器",path:"remoteHost"},{default:Vue.withCtx(()=>[Vue.createVNode(i,null,{default:Vue.withCtx(()=>[Vue.createVNode(m,{value:Vue.unref(o).protocol,"onUpdate:value":u[1]||(u[1]=t=>Vue.unref(o).protocol=t),options:_,style:{width:"120px"}},null,8,["value"]),Vue.createVNode(V,{value:Vue.unref(o).remoteHost,"onUpdate:value":u[2]||(u[2]=t=>Vue.unref(o).remoteHost=t),placeholder:"输入目标机器"},null,8,["value"])]),_:1})]),_:1}),Vue.createVNode(r,{label:"最大数量",path:"pushMaxCount"},{default:Vue.withCtx(()=>[Vue.createVNode(v,{value:s.value,"onUpdate:value":u[3]||(u[3]=t=>s.value=t),placeholder:"输入数量"},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1}),Vue.createVNode(h,{title:"拉流测试"},{"header-extra":Vue.withCtx(()=>[Vue.createTextVNode(" 正在拉取数量: "+Vue.toDisplayString(c.value),1)]),action:Vue.withCtx(()=>[Vue.createVNode(C,{value:Vue.unref(l).pullCount,"onUpdate:value":u[8]||(u[8]=t=>Vue.unref(l).pullCount=t),max:p.value},null,8,["value","max"])]),default:Vue.withCtx(()=>[Vue.createVNode(f,{model:Vue.unref(l)},{default:Vue.withCtx(()=>[Vue.createVNode(r,{label:"远程地址",path:"remoteHost"},{default:Vue.withCtx(()=>[Vue.createVNode(i,null,{default:Vue.withCtx(()=>[Vue.createVNode(m,{value:Vue.unref(l).protocol,"onUpdate:value":u[5]||(u[5]=t=>Vue.unref(l).protocol=t),options:x,style:{width:"120px"}},null,8,["value"]),Vue.createVNode(V,{value:Vue.unref(l).remoteURL,"onUpdate:value":u[6]||(u[6]=t=>Vue.unref(l).remoteURL=t),placeholder:"输入远程地址"},null,8,["value"])]),_:1})]),_:1}),Vue.createVNode(r,{label:"最大数量",path:"pullMaxCount"},{default:Vue.withCtx(()=>[Vue.createVNode(v,{value:p.value,"onUpdate:value":u[7]||(u[7]=t=>p.value=t),placeholder:"输入数量"},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1})]),_:1})])}}});export{L as default};
|
||||
1
plugin/console/web/assets/index-de28ae1e.js
Normal file
1
plugin/console/web/assets/index-dfd97757.css
Normal file
@@ -0,0 +1 @@
|
||||
.canvas-container{width:100%}.canvas-container .canvas{width:100%;display:block;height:100%;image-rendering:-webkit-crisp-edges;image-rendering:pixelated;image-rendering:crisp-edges}.top[data-v-4ab69993]{display:flex}
|
||||
1
plugin/console/web/assets/index-f4329c0d.js
Normal file
14
plugin/console/web/assets/index-fdf89b93.js
Normal file
54
plugin/console/web/assets/index.esm.min-024473c8.js
Normal file
127
plugin/console/web/assets/login-bg-7b57ab51.svg
Normal file
@@ -0,0 +1,127 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1361px"
|
||||
height="609px" viewBox="0 0 1361 609" version="1.1">
|
||||
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 21</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs/>
|
||||
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
|
||||
<g id="Group-21" transform="translate(77.000000, 73.000000)">
|
||||
<g id="Group-18" opacity="0.8"
|
||||
transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
|
||||
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367"
|
||||
rx="21.7830479" ry="21.766008"/>
|
||||
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601"
|
||||
rx="5.2173913" ry="5.21330997"/>
|
||||
<path
|
||||
d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z"
|
||||
id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"/>
|
||||
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6"
|
||||
stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7"
|
||||
stroke-width="0.702678964" opacity="0.7" stroke-linecap="round"
|
||||
stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"/>
|
||||
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9"
|
||||
stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round"
|
||||
stroke-dasharray="1.405357899873153,2.108036953469981"/>
|
||||
<g id="Group-17"
|
||||
transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)"
|
||||
fill="#CFDAE6">
|
||||
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653"
|
||||
ry="9.12768076"/>
|
||||
<path
|
||||
d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z"
|
||||
id="Oval-4"
|
||||
transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-14"
|
||||
transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439"
|
||||
rx="29.1176471" ry="29.1402439"/>
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439"
|
||||
rx="21.5686275" ry="21.5853659"/>
|
||||
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341"
|
||||
rx="23.7254902" ry="23.7439024"/>
|
||||
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439"
|
||||
rx="10.7843137" ry="10.7926829"/>
|
||||
<path
|
||||
d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z"
|
||||
id="Oval-2" fill="#BACAD9"/>
|
||||
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)"
|
||||
fill="#E6A1A6">
|
||||
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824"
|
||||
ry="6.47560976"/>
|
||||
<path
|
||||
d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z"
|
||||
id="Oval-2-Copy-2"
|
||||
transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "/>
|
||||
</g>
|
||||
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706"
|
||||
ry="1.61890244"/>
|
||||
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098"
|
||||
rx="1.61764706" ry="1.61890244"/>
|
||||
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488"
|
||||
rx="2.15686275" ry="2.15853659"/>
|
||||
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6"
|
||||
opacity="0.8"/>
|
||||
</g>
|
||||
<g id="Group-10" opacity="0.799999952"
|
||||
transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
|
||||
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32"
|
||||
rx="11.1864407" ry="11.2941176"/>
|
||||
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
|
||||
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627"
|
||||
ry="8.55614973"/>
|
||||
<path
|
||||
d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z"
|
||||
id="Oval-7"/>
|
||||
</g>
|
||||
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6"
|
||||
stroke-width="0.941176471"/>
|
||||
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186"
|
||||
cy="3.29411765" rx="3.26271186" ry="3.29411765"/>
|
||||
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017"
|
||||
ry="2.82352941"/>
|
||||
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6"
|
||||
stroke-width="0.941176471"/>
|
||||
</g>
|
||||
<g id="Group-19" opacity="0.33"
|
||||
transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
|
||||
<g id="Group-17"
|
||||
transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)"
|
||||
fill="#BACAD9">
|
||||
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"/>
|
||||
<path
|
||||
d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z"
|
||||
id="Oval-4"
|
||||
transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "/>
|
||||
</g>
|
||||
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"/>
|
||||
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9"
|
||||
stroke-width="1.16666667"/>
|
||||
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9"
|
||||
stroke-width="1.16666667"/>
|
||||
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667"
|
||||
points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"/>
|
||||
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7"
|
||||
stroke-width="1.16666667" opacity="0.6"/>
|
||||
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9"
|
||||
stroke-width="1.16666667"/>
|
||||
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6"
|
||||
stroke-width="1.16666667"/>
|
||||
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"/>
|
||||
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"/>
|
||||
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25"
|
||||
r="8.75"/>
|
||||
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333"
|
||||
cy="30.3333333" r="5.83333333"/>
|
||||
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<div xmlns="" id="divScriptsUsed" style="display: none"/>
|
||||
<script xmlns="" id="globalVarsDetection"
|
||||
src="chrome-extension://cmkdbmfndkfgebldhnkbfhlneefdaaip/js/wrs_env.js"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
BIN
plugin/console/web/assets/logo-4a45ef13.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
26
plugin/console/web/assets/nav-horizontal-f3cbecb9.svg
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="52px" height="45px"
|
||||
viewBox="0 0 52 45" enable-background="new 0 0 52 45" xml:space="preserve"> <image id="image0"
|
||||
width="52"
|
||||
height="45"
|
||||
x="0" y="0"
|
||||
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAtCAMAAADWf7iKAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
|
||||
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAkFBMVEX+/v78/Pz6+vr39/f0
|
||||
9PTx8fHv7+/u7u729vbHyc1ESVsxNkgwNkg7QFFscH3T1NfGyMwxN0k9QlPa3N5vdID4+Pjz8/Pr
|
||||
6+s6QVLw8PDm5ubk5OTy8vLj4+Pt7e3u8PPw8vXu8PTn5+fw8fXs7Oz5+fnp6ene3t7b29vc3Nzf
|
||||
39/q6ur7+/vo6Oj9/f3///855aJlAAAAAWJLR0QvI9QgEQAAAAd0SU1FB+UHAxEtKCKzaD0AAAC8
|
||||
SURBVEjH7dbLGoIgEIbhEUHI6JyYgmWWnTzd/92FTzcws2vBt38f2P0DELGYi0SiSgSPWQTeqEW6
|
||||
1MhW643yiqntDkvm9gfFIBYpxWh9FBmYHP23X6dcQVHSjNYlB2mpyDqQFRVVDs7/ji41rYACCiig
|
||||
gHBIWiqyxo/alYga7ufzRkR35YeaaGrX+pOgeFTPF673x3Yi7ueDxcluKDE1Qy5N1o8AY98qbgQm
|
||||
Z+Yrx5sJxqhnrEXF2PzM9AV+UvDCWyYgmAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNy0wM1Qw
|
||||
OTo0NTo0MCswODowMOjZqbAAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDctMDNUMDk6NDU6NDAr
|
||||
MDg6MDCZhBEMAAAAIHRFWHRzb2Z0d2FyZQBodHRwczovL2ltYWdlbWFnaWNrLm9yZ7zPHZ0AAAAY
|
||||
dEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAXdEVYdFRodW1iOjpJbWFnZTo6SGVp
|
||||
Z2h0ADQ1+dH7kAAAABZ0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAA1MoYBn/8AAAAZdEVYdFRodW1i
|
||||
OjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTYyNTI3Njc0MKmy
|
||||
pv8AAAASdEVYdFRodW1iOjpTaXplADEzMzJCQoe7yB0AAABGdEVYdFRodW1iOjpVUkkAZmlsZTov
|
||||
Ly9hcHAvdG1wL2ltYWdlbGMvaW1ndmlldzJfOV8xNjIzOTEyMDA2MDA1NDY4Ml8yMl9bMF2ZTW7W
|
||||
AAAAAElFTkSuQmCC"></image>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
49
plugin/console/web/assets/nav-theme-dark-be6f2a3d.svg
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 5 Copy 5</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox"
|
||||
id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1"
|
||||
result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix"
|
||||
in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox"
|
||||
id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1"
|
||||
result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix"
|
||||
in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" transform="translate(-1190.000000, -136.000000)">
|
||||
<g id="Group-8" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="-1" y="0" width="49"
|
||||
height="10"></rect>
|
||||
<rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16"
|
||||
height="44"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
49
plugin/console/web/assets/nav-theme-light-43fdcab2.svg
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 5</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox"
|
||||
id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1"
|
||||
result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix"
|
||||
in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox"
|
||||
id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1"
|
||||
result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix"
|
||||
in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)">
|
||||
<g id="Group-8" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 137.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-18" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="16"
|
||||
height="44"></rect>
|
||||
<rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="-1" y="0" width="49"
|
||||
height="10"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
74
plugin/console/web/assets/play-21cd083b.js
Normal file
3
plugin/console/web/assets/publish-a1ff5a98.js
Normal file
@@ -0,0 +1,3 @@
|
||||
import{_ as N}from"./index-93eb0e35.js";import"./index-747e11ee.js";import"./vendor-ec30964e.js";const k=Vue.createTextVNode("推摄像头"),S=Vue.createTextVNode(" 推桌面"),D=Vue.createTextVNode("关闭"),T=["srcObject"],P=Vue.defineComponent({setup(b){const V=Vue.ref(""),l=Vue.ref(""),p=Vue.ref("live/test"),r=Vue.ref([]),c=Vue.ref(),m=naive.useMessage(),f=Vue.ref(""),v=Vue.ref("http://localhost:8080");navigator.mediaDevices.enumerateDevices().then(n=>{n.forEach(e=>{console.log(e.kind+": "+e.label+" id = "+e.deviceId,e),e.kind=="videoinput"&&r.value.push({label:e.label,value:e.deviceId})}),r.value.length>0&&(l.value=r.value[0].value)});async function C(){const n=await navigator.mediaDevices.getUserMedia({video:{deviceId:l.value},audio:!0});_(n)}async function w(){const n=await navigator.mediaDevices.getDisplayMedia();_(n)}let s;function h(){s==null||s()}let o;Vue.onUnmounted(h);function g(){o==null||o.getStats().then(n=>{let e="";n.forEach(a=>{e+=`${a.type} ${a.id} ${a.timestamp}
|
||||
`,Object.keys(a).forEach(t=>{t!=="type"&&t!=="id"&&t!=="timestamp"&&(e+=` ${t}: ${a[t]}
|
||||
`)})}),f.value=e})}async function _(n){try{c.value=n,o=new RTCPeerConnection,o.oniceconnectionstatechange=()=>{var t;console.log("oniceconnectionstatechange",o.iceConnectionState),m.info(o.iceConnectionState),o.iceConnectionState==="disconnected"&&((t=c.value)==null||t.getTracks().forEach(u=>u.stop()),c.value=void 0)},o.onicecandidate=t=>{console.log("onicecandidate",t.candidate)},n.getTracks().forEach(t=>{o.addTrack(t,n)});const e=await o.createOffer();await o.setLocalDescription(e);const a=await fetch(`${v.value}/webrtc/push/${p.value}`,{method:"POST",mode:"cors",cache:"no-cache",credentials:"include",redirect:"follow",referrerPolicy:"no-referrer",headers:{"Content-Type":"application/sdp"},body:e.sdp});V.value=await a.text(),await o.setRemoteDescription(new RTCSessionDescription({type:"answer",sdp:V.value})),s=()=>{var t;o.close(),(t=c.value)==null||t.getTracks().forEach(u=>u.stop()),c.value=void 0}}catch(e){m.error(e.message)}}return(n,e)=>{const a=Vue.resolveComponent("n-input"),t=Vue.resolveComponent("n-select"),u=Vue.resolveComponent("n-button"),d=Vue.resolveComponent("n-space"),y=Vue.resolveComponent("n-card"),x=Vue.resolveComponent("n-split");return Vue.openBlock(),Vue.createBlock(d,{vertical:""},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(N),{onTick:g}),Vue.createVNode(d,null,{default:Vue.withCtx(()=>[Vue.createVNode(y,null,{default:Vue.withCtx(()=>[Vue.createVNode(d,{vertical:""},{default:Vue.withCtx(()=>[Vue.createVNode(a,{value:v.value,"onUpdate:value":e[0]||(e[0]=i=>v.value=i)},null,8,["value"]),Vue.createVNode(t,{value:l.value,"onUpdate:value":e[1]||(e[1]=i=>l.value=i),options:r.value},null,8,["value","options"]),Vue.createVNode(a,{value:p.value,"onUpdate:value":e[2]||(e[2]=i=>p.value=i)},null,8,["value"]),Vue.createVNode(d,null,{default:Vue.withCtx(()=>[Vue.createVNode(u,{onClick:C,type:"primary"},{default:Vue.withCtx(()=>[k]),_:1}),Vue.createVNode(u,{onClick:w,type:"primary"},{default:Vue.withCtx(()=>[S]),_:1}),Vue.createVNode(u,{onClick:h,type:"error"},{default:Vue.withCtx(()=>[D]),_:1})]),_:1})]),_:1})]),_:1}),Vue.createElementVNode("video",{id:"video",width:"640",height:"480",autoplay:"",muted:"",srcObject:c.value},null,8,T)]),_:1}),Vue.createVNode(x,{direction:"horizontal",max:.75,min:.25},{1:Vue.withCtx(()=>[Vue.createElementVNode("pre",null,Vue.toDisplayString(V.value),1)]),2:Vue.withCtx(()=>[Vue.createElementVNode("pre",null,Vue.toDisplayString(f.value),1)]),_:1},8,["max","min"])]),_:1})}}});export{P as default};
|
||||
1
plugin/console/web/assets/subscribers-393bc21a.css
Normal file
@@ -0,0 +1 @@
|
||||
.top[data-v-6d0a1b16]{display:flex}.n-gradient-text[data-v-6d0a1b16]{font-size:24px}
|
||||
1
plugin/console/web/assets/subscribers-dfda0150.js
Normal file
@@ -0,0 +1 @@
|
||||
import{l as p}from"./vendor-ec30964e.js";import{B as m}from"./TableAction-8944830d.js";import{_}from"./index-93eb0e35.js";import{h}from"./index-60c113a0.js";import{_ as F,i as V}from"./index-747e11ee.js";const f=Vue.defineComponent({setup(w){const{t:u}=V.global,i=p(),{params:r}=i,o=r.id,a=Vue.ref([]),n=[{title:"ID",key:"id",width:100},{title:u("开始时间"),key:"startTime",width:100,render:t=>Vue.h(naive.NTime,{time:new Date(t.startTime),type:"relative"})},{title:u("音频状态"),width:80,render:t=>{var e;return Vue.h("span",(e=t.audioReader)==null?void 0:e.state)}},{title:u("音频序号"),width:100,render:t=>{var e;return Vue.h("span",(e=t.audioReader)==null?void 0:e.sequence)}},{title:u("音频时间戳"),width:100,render:t=>{var e;return Vue.h("span",(e=t.audioReader)==null?void 0:e.timestamp)}},{title:u("音频延迟"),width:80,render:t=>{var e;return Vue.h("span",(e=t.audioReader)==null?void 0:e.delay)}},{title:u("视频状态"),width:80,render:t=>{var e;return Vue.h("span",(e=t.videoReader)==null?void 0:e.state)}},{title:u("视频序号"),width:100,render:t=>{var e;return Vue.h("span",(e=t.videoReader)==null?void 0:e.sequence)}},{title:u("视频时间戳"),width:100,render:t=>{var e;return Vue.h("span",(e=t.videoReader)==null?void 0:e.timestamp)}},{title:u("视频延迟"),width:80,render:t=>{var e;return Vue.h("span",(e=t.videoReader)==null?void 0:e.delay)}},{title:u("元信息"),key:"meta"}];async function s(t){const e=await h(o,r.streamPath.join("/"));a.value=e.list}function d(t){console.log(t)}return(t,e)=>{const c=Vue.resolveComponent("n-card");return Vue.openBlock(),Vue.createElementBlock("div",null,[Vue.createVNode(Vue.unref(_),{onTick:s}),Vue.createVNode(c,{bordered:!1,class:"proCard"},{default:Vue.withCtx(()=>[Vue.createVNode(Vue.unref(m),{title:t.$t("订阅者列表"),columns:n,dataSource:a.value,pagination:!1,"row-key":l=>l.id,"onUpdate:checkedRowKeys":d,"scroll-x":1090},null,8,["title","dataSource","row-key"])]),_:1})])}}}),C=F(f,[["__scopeId","data-v-6d0a1b16"]]);export{C as default};
|
||||
1
plugin/console/web/assets/track-2f635766.js
Normal file
1
plugin/console/web/assets/track-b94feefc.css
Normal file
@@ -0,0 +1 @@
|
||||
.events[data-v-b65839ec]{width:100%;height:300px}.memorys[data-v-b65839ec]{width:100%;height:150px}.top[data-v-b65839ec]{display:flex}[data-v-b65839ec] .red td{color:#ff0000bf!important}.n-gradient-text[data-v-b65839ec]{font-size:24px}
|
||||
67
plugin/console/web/assets/vendor-ec30964e.js
Normal file
BIN
plugin/console/web/assets/videodec-9aaeada5.wasm
Normal file
BIN
plugin/console/web/assets/videodec_simd-c906c3fc.wasm
Normal file
BIN
plugin/console/web/favicon.ico
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
plugin/console/web/guide.png
Normal file
|
After Width: | Height: | Size: 635 KiB |
1
plugin/console/web/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!doctype html><html id=htmlRoot data-theme=light><head><meta charset=UTF-8 /><meta content="IE=edge,chrome=1" http-equiv=X-UA-Compatible /><meta content=webkit name=renderer /><meta content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=0" name=viewport /><link href=./favicon.ico rel=icon /><title>Monibuca 实例管理平台</title><script src=https://hm.baidu.com/hm.js?c602c039e7a2b165463bb1db0744a757></script><script src=./static/js/vue.js></script><script src=./static/js/vue-router.js></script><script src=./static/js/vue-demi.js></script><script src=./static/js/naive-ui.js></script><script type=module crossorigin src=./assets/index-747e11ee.js></script><link rel=modulepreload crossorigin href=./assets/vendor-ec30964e.js><link rel=stylesheet href=./assets/index-49218380.css></head><body><div id=appProvider style=display:none></div><div id=app><style>.first-loading-wrap{display:flex;width:100%;height:100vh;justify-content:center;align-items:center;flex-direction:column}.first-loading-wrap>h1{font-size:128px}.first-loading-wrap .loading-wrap{padding:98px;display:flex;justify-content:center;align-items:center}.dot{-webkit-animation:antRotate 1.2s infinite linear;animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:32px;width:32px;height:32px;box-sizing:border-box}.dot i{width:14px;height:14px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;-webkit-animation:antSpinMove 1s infinite linear alternate;animation:antSpinMove 1s infinite linear alternate}.dot i:first-child{top:0;left:0}.dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style><div class=first-loading-wrap><div class=loading-wrap><span class="dot dot-spin"><i></i><i></i><i></i><i></i></span></div></div></div><script>var globalThis = window</script></body></html>
|
||||
9
plugin/console/web/static/js/naive-ui.js
Normal file
113
plugin/console/web/static/js/vue-demi.js
Normal file
@@ -0,0 +1,113 @@
|
||||
var VueDemi = (function (VueDemi, Vue, VueCompositionAPI) {
|
||||
if (VueDemi.install) {
|
||||
return VueDemi
|
||||
}
|
||||
if (!Vue) {
|
||||
console.error('[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.')
|
||||
return VueDemi
|
||||
}
|
||||
|
||||
// Vue 2.7
|
||||
if (Vue.version.slice(0, 4) === '2.7.') {
|
||||
for (var key in Vue) {
|
||||
VueDemi[key] = Vue[key]
|
||||
}
|
||||
VueDemi.isVue2 = true
|
||||
VueDemi.isVue3 = false
|
||||
VueDemi.install = function () {}
|
||||
VueDemi.Vue = Vue
|
||||
VueDemi.Vue2 = Vue
|
||||
VueDemi.version = Vue.version
|
||||
VueDemi.warn = Vue.util.warn
|
||||
function createApp(rootComponent, rootProps) {
|
||||
var vm
|
||||
var provide = {}
|
||||
var app = {
|
||||
config: Vue.config,
|
||||
use: Vue.use.bind(Vue),
|
||||
mixin: Vue.mixin.bind(Vue),
|
||||
component: Vue.component.bind(Vue),
|
||||
provide: function (key, value) {
|
||||
provide[key] = value
|
||||
return this
|
||||
},
|
||||
directive: function (name, dir) {
|
||||
if (dir) {
|
||||
Vue.directive(name, dir)
|
||||
return app
|
||||
} else {
|
||||
return Vue.directive(name)
|
||||
}
|
||||
},
|
||||
mount: function (el, hydrating) {
|
||||
if (!vm) {
|
||||
vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
|
||||
vm.$mount(el, hydrating)
|
||||
return vm
|
||||
} else {
|
||||
return vm
|
||||
}
|
||||
},
|
||||
unmount: function () {
|
||||
if (vm) {
|
||||
vm.$destroy()
|
||||
vm = undefined
|
||||
}
|
||||
},
|
||||
}
|
||||
return app
|
||||
}
|
||||
VueDemi.createApp = createApp
|
||||
}
|
||||
// Vue 2.6.x
|
||||
else if (Vue.version.slice(0, 2) === '2.') {
|
||||
if (VueCompositionAPI) {
|
||||
for (var key in VueCompositionAPI) {
|
||||
VueDemi[key] = VueCompositionAPI[key]
|
||||
}
|
||||
VueDemi.isVue2 = true
|
||||
VueDemi.isVue3 = false
|
||||
VueDemi.install = function () {}
|
||||
VueDemi.Vue = Vue
|
||||
VueDemi.Vue2 = Vue
|
||||
VueDemi.version = Vue.version
|
||||
} else {
|
||||
console.error('[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.')
|
||||
}
|
||||
}
|
||||
// Vue 3
|
||||
else if (Vue.version.slice(0, 2) === '3.') {
|
||||
for (var key in Vue) {
|
||||
VueDemi[key] = Vue[key]
|
||||
}
|
||||
VueDemi.isVue2 = false
|
||||
VueDemi.isVue3 = true
|
||||
VueDemi.install = function () {}
|
||||
VueDemi.Vue = Vue
|
||||
VueDemi.Vue2 = undefined
|
||||
VueDemi.version = Vue.version
|
||||
VueDemi.set = function (target, key, val) {
|
||||
if (Array.isArray(target)) {
|
||||
target.length = Math.max(target.length, key)
|
||||
target.splice(key, 1, val)
|
||||
return val
|
||||
}
|
||||
target[key] = val
|
||||
return val
|
||||
}
|
||||
VueDemi.del = function (target, key) {
|
||||
if (Array.isArray(target)) {
|
||||
target.splice(key, 1)
|
||||
return
|
||||
}
|
||||
delete target[key]
|
||||
}
|
||||
} else {
|
||||
console.error('[vue-demi] Vue version ' + Vue.version + ' is unsupported.')
|
||||
}
|
||||
return VueDemi
|
||||
})(
|
||||
(this.VueDemi = this.VueDemi || (typeof VueDemi !== 'undefined' ? VueDemi : {})),
|
||||
this.Vue || (typeof Vue !== 'undefined' ? Vue : undefined),
|
||||
this.VueCompositionAPI || (typeof VueCompositionAPI !== 'undefined' ? VueCompositionAPI : undefined)
|
||||
);
|
||||
1
plugin/console/web/static/js/vue-demi.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var VueDemi=function(e,t,i){if(e.install)return e;if(!t)return console.error("[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`."),e;if("2.7."===t.version.slice(0,4)){for(var n in t)e[n]=t[n];e.isVue2=!0,e.isVue3=!1,e.install=function(){},e.Vue=t,e.Vue2=t,e.version=t.version,e.warn=t.util.warn,e.createApp=function(n,o){var r,u={},s={config:t.config,use:t.use.bind(t),mixin:t.mixin.bind(t),component:t.component.bind(t),provide:function(e,i){return u[e]=i,this},directive:function(e,i){return i?(t.directive(e,i),s):t.directive(e)},mount:function(e,i){return r||((r=new t(Object.assign({propsData:o},n,{provide:Object.assign(u,n.provide)}))).$mount(e,i),r)},unmount:function(){r&&(r.$destroy(),r=void 0)}};return s}}else if("2."===t.version.slice(0,2))if(i){for(var n in i)e[n]=i[n];e.isVue2=!0,e.isVue3=!1,e.install=function(){},e.Vue=t,e.Vue2=t,e.version=t.version}else console.error("[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.");else if("3."===t.version.slice(0,2)){for(var n in t)e[n]=t[n];e.isVue2=!1,e.isVue3=!0,e.install=function(){},e.Vue=t,e.Vue2=void 0,e.version=t.version,e.set=function(e,i,n){return Array.isArray(e)?(e.length=Math.max(e.length,i),e.splice(i,1,n),n):e[i]=n},e.del=function(e,i){Array.isArray(e)?e.splice(i,1):delete e[i]}}else console.error("[vue-demi] Vue version "+t.version+" is unsupported.");return e}(this.VueDemi=this.VueDemi||(void 0!==VueDemi?VueDemi:{}),this.Vue||("undefined"!=typeof Vue?Vue:void 0),this.VueCompositionAPI||("undefined"!=typeof VueCompositionAPI?VueCompositionAPI:void 0));
|
||||
3598
plugin/console/web/static/js/vue-router.js
Normal file
6
plugin/console/web/static/js/vue-router.min.js
vendored
Normal file
15704
plugin/console/web/static/js/vue.js
Normal file
1
plugin/console/web/static/js/vue.min.js
vendored
Normal file
@@ -80,6 +80,16 @@ func (plugin *FLVPlugin) Download(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var amf *rtmp.AMF
|
||||
var metaData rtmp.EcmaArray
|
||||
initMetaData := func(reader io.Reader, dataLen uint32) {
|
||||
data := make([]byte, dataLen+4)
|
||||
_, err = io.ReadFull(reader, data)
|
||||
amf = &rtmp.AMF{
|
||||
Buffer: util.Buffer(data[1+2+len("onMetaData") : len(data)-4]),
|
||||
}
|
||||
var obj any
|
||||
obj, err = amf.Unmarshal()
|
||||
metaData = obj.(rtmp.EcmaArray)
|
||||
}
|
||||
var filepositions []uint64
|
||||
var times []float64
|
||||
for pass := 0; pass < 2; pass++ {
|
||||
@@ -164,7 +174,11 @@ func (plugin *FLVPlugin) Download(w http.ResponseWriter, r *http.Request) {
|
||||
//fmt.Println(lastTimestamp, tagHead)
|
||||
if init {
|
||||
if t == flv.FLV_TAG_TYPE_SCRIPT {
|
||||
_, err = reader.Discard(int(dataLen) + 4)
|
||||
if pass == 0 {
|
||||
initMetaData(reader, dataLen)
|
||||
} else {
|
||||
_, err = reader.Discard(int(dataLen) + 4)
|
||||
}
|
||||
} else {
|
||||
lastTimestamp += offsetTimestamp
|
||||
if lastTimestamp >= uint32(timeRange.Milliseconds()) {
|
||||
@@ -193,14 +207,7 @@ func (plugin *FLVPlugin) Download(w http.ResponseWriter, r *http.Request) {
|
||||
switch t {
|
||||
case flv.FLV_TAG_TYPE_SCRIPT:
|
||||
if pass == 0 {
|
||||
data := make([]byte, dataLen+4)
|
||||
_, err = io.ReadFull(reader, data)
|
||||
amf = &rtmp.AMF{
|
||||
Buffer: util.Buffer(data[1+2+len("onMetaData") : len(data)-4]),
|
||||
}
|
||||
var obj any
|
||||
obj, err = amf.Unmarshal()
|
||||
metaData = obj.(map[string]any)
|
||||
initMetaData(reader, dataLen)
|
||||
} else {
|
||||
_, err = reader.Discard(int(dataLen) + 4)
|
||||
}
|
||||
|
||||
31
plugin/monitor/api.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package plugin_monitor
|
||||
|
||||
import (
|
||||
"context"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
"m7s.live/m7s/v5/plugin/monitor/pb"
|
||||
monitor "m7s.live/m7s/v5/plugin/monitor/pkg"
|
||||
"slices"
|
||||
)
|
||||
|
||||
func (cfg *MonitorPlugin) SearchTask(ctx context.Context, req *pb.SearchTaskRequest) (res *pb.SearchTaskResponse, err error) {
|
||||
res = &pb.SearchTaskResponse{}
|
||||
var tasks []*monitor.Task
|
||||
tx := cfg.DB.Find(&tasks)
|
||||
if err = tx.Error; err == nil {
|
||||
res.Data = slices.Collect(func(yield func(*pb.Task) bool) {
|
||||
for _, t := range tasks {
|
||||
yield(&pb.Task{
|
||||
Id: t.ID,
|
||||
StartTime: timestamppb.New(t.StartTime),
|
||||
EndTime: timestamppb.New(t.CreatedAt),
|
||||
Owner: t.OwnerType,
|
||||
Type: uint32(t.TaskType),
|
||||
Description: t.Description,
|
||||
Reason: t.Reason,
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -1,22 +1,55 @@
|
||||
package plugin_monitor
|
||||
|
||||
import (
|
||||
"github.com/polarsignals/frostdb"
|
||||
"m7s.live/m7s/v5"
|
||||
"m7s.live/m7s/v5/pkg/util"
|
||||
"m7s.live/m7s/v5/plugin/monitor/pb"
|
||||
monitor "m7s.live/m7s/v5/plugin/monitor/pkg"
|
||||
"time"
|
||||
)
|
||||
|
||||
var _ = m7s.InstallPlugin[MonitorPlugin]()
|
||||
var _ = m7s.InstallPlugin[MonitorPlugin](&pb.Api_ServiceDesc, pb.RegisterApiHandler)
|
||||
|
||||
type MonitorPlugin struct {
|
||||
pb.UnimplementedApiServer
|
||||
m7s.Plugin
|
||||
columnstore *frostdb.ColumnStore
|
||||
//columnstore *frostdb.ColumnStore
|
||||
}
|
||||
|
||||
func (cfg *MonitorPlugin) taskDisposeListener(task *util.Task) func() {
|
||||
return func() {
|
||||
var th monitor.Task
|
||||
th.ID = task.ID
|
||||
th.StartTime = task.StartTime
|
||||
th.CreatedAt = time.Now()
|
||||
th.OwnerType = task.GetOwnerType()
|
||||
th.TaskType = task.GetTaskTypeID()
|
||||
th.Reason = task.StopReason().Error()
|
||||
cfg.DB.Create(&th)
|
||||
}
|
||||
}
|
||||
|
||||
func (cfg *MonitorPlugin) monitorTask(mt util.IMarcoTask) {
|
||||
mt.OnTaskAdded(func(task util.ITask) {
|
||||
task.GetTask().OnDispose(cfg.taskDisposeListener(task.GetTask()))
|
||||
})
|
||||
for t := range mt.RangeSubTask {
|
||||
t.OnDispose(cfg.taskDisposeListener(t.GetTask()))
|
||||
if mt, ok := t.(util.IMarcoTask); ok {
|
||||
cfg.monitorTask(mt)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (cfg *MonitorPlugin) OnInit() (err error) {
|
||||
cfg.columnstore, err = frostdb.New()
|
||||
//cfg.columnstore, err = frostdb.New()
|
||||
//database, _ := cfg.columnstore.DB(cfg, "monitor")
|
||||
if err != nil {
|
||||
return err
|
||||
if cfg.DB != nil {
|
||||
err = cfg.DB.AutoMigrate(&monitor.Task{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cfg.monitorTask(cfg.Plugin.Server)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
357
plugin/monitor/pb/monitor.pb.go
Normal file
@@ -0,0 +1,357 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.28.1
|
||||
// protoc v3.19.1
|
||||
// source: monitor.proto
|
||||
|
||||
package pb
|
||||
|
||||
import (
|
||||
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type SearchTaskRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
}
|
||||
|
||||
func (x *SearchTaskRequest) Reset() {
|
||||
*x = SearchTaskRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_monitor_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *SearchTaskRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*SearchTaskRequest) ProtoMessage() {}
|
||||
|
||||
func (x *SearchTaskRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_monitor_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use SearchTaskRequest.ProtoReflect.Descriptor instead.
|
||||
func (*SearchTaskRequest) Descriptor() ([]byte, []int) {
|
||||
return file_monitor_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
type Task struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
|
||||
Type uint32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"`
|
||||
StartTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=startTime,proto3" json:"startTime,omitempty"`
|
||||
EndTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=endTime,proto3" json:"endTime,omitempty"`
|
||||
Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"`
|
||||
Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"`
|
||||
}
|
||||
|
||||
func (x *Task) Reset() {
|
||||
*x = Task{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_monitor_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *Task) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*Task) ProtoMessage() {}
|
||||
|
||||
func (x *Task) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_monitor_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use Task.ProtoReflect.Descriptor instead.
|
||||
func (*Task) Descriptor() ([]byte, []int) {
|
||||
return file_monitor_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *Task) GetId() uint32 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *Task) GetOwner() string {
|
||||
if x != nil {
|
||||
return x.Owner
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Task) GetType() uint32 {
|
||||
if x != nil {
|
||||
return x.Type
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *Task) GetStartTime() *timestamppb.Timestamp {
|
||||
if x != nil {
|
||||
return x.StartTime
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Task) GetEndTime() *timestamppb.Timestamp {
|
||||
if x != nil {
|
||||
return x.EndTime
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Task) GetDescription() string {
|
||||
if x != nil {
|
||||
return x.Description
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Task) GetReason() string {
|
||||
if x != nil {
|
||||
return x.Reason
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type SearchTaskResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
|
||||
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
|
||||
Data []*Task `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"`
|
||||
}
|
||||
|
||||
func (x *SearchTaskResponse) Reset() {
|
||||
*x = SearchTaskResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_monitor_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *SearchTaskResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*SearchTaskResponse) ProtoMessage() {}
|
||||
|
||||
func (x *SearchTaskResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_monitor_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use SearchTaskResponse.ProtoReflect.Descriptor instead.
|
||||
func (*SearchTaskResponse) Descriptor() ([]byte, []int) {
|
||||
return file_monitor_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *SearchTaskResponse) GetCode() uint32 {
|
||||
if x != nil {
|
||||
return x.Code
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *SearchTaskResponse) GetMessage() string {
|
||||
if x != nil {
|
||||
return x.Message
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *SearchTaskResponse) GetData() []*Task {
|
||||
if x != nil {
|
||||
return x.Data
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_monitor_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_monitor_proto_rawDesc = []byte{
|
||||
0x0a, 0x0d, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
|
||||
0x07, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
|
||||
0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63,
|
||||
0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xea, 0x01, 0x0a,
|
||||
0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74,
|
||||
0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
|
||||
0x38, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09,
|
||||
0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x64,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
|
||||
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
|
||||
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12,
|
||||
0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x12, 0x53, 0x65, 0x61,
|
||||
0x72, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||
0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63,
|
||||
0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a,
|
||||
0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f,
|
||||
0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
|
||||
0x32, 0x71, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x12, 0x6a, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63,
|
||||
0x68, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1a, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2e,
|
||||
0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72,
|
||||
0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23,
|
||||
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72,
|
||||
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x74, 0x61, 0x73, 0x6b,
|
||||
0x3a, 0x01, 0x2a, 0x42, 0x23, 0x5a, 0x21, 0x6d, 0x37, 0x73, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x2f,
|
||||
0x6d, 0x37, 0x73, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x6d, 0x6f,
|
||||
0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_monitor_proto_rawDescOnce sync.Once
|
||||
file_monitor_proto_rawDescData = file_monitor_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_monitor_proto_rawDescGZIP() []byte {
|
||||
file_monitor_proto_rawDescOnce.Do(func() {
|
||||
file_monitor_proto_rawDescData = protoimpl.X.CompressGZIP(file_monitor_proto_rawDescData)
|
||||
})
|
||||
return file_monitor_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_monitor_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
|
||||
var file_monitor_proto_goTypes = []interface{}{
|
||||
(*SearchTaskRequest)(nil), // 0: monitor.SearchTaskRequest
|
||||
(*Task)(nil), // 1: monitor.Task
|
||||
(*SearchTaskResponse)(nil), // 2: monitor.SearchTaskResponse
|
||||
(*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp
|
||||
}
|
||||
var file_monitor_proto_depIdxs = []int32{
|
||||
3, // 0: monitor.Task.startTime:type_name -> google.protobuf.Timestamp
|
||||
3, // 1: monitor.Task.endTime:type_name -> google.protobuf.Timestamp
|
||||
1, // 2: monitor.SearchTaskResponse.data:type_name -> monitor.Task
|
||||
0, // 3: monitor.api.SearchTask:input_type -> monitor.SearchTaskRequest
|
||||
2, // 4: monitor.api.SearchTask:output_type -> monitor.SearchTaskResponse
|
||||
4, // [4:5] is the sub-list for method output_type
|
||||
3, // [3:4] is the sub-list for method input_type
|
||||
3, // [3:3] is the sub-list for extension type_name
|
||||
3, // [3:3] is the sub-list for extension extendee
|
||||
0, // [0:3] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_monitor_proto_init() }
|
||||
func file_monitor_proto_init() {
|
||||
if File_monitor_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_monitor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*SearchTaskRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_monitor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*Task); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_monitor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*SearchTaskResponse); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_monitor_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 3,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
GoTypes: file_monitor_proto_goTypes,
|
||||
DependencyIndexes: file_monitor_proto_depIdxs,
|
||||
MessageInfos: file_monitor_proto_msgTypes,
|
||||
}.Build()
|
||||
File_monitor_proto = out.File
|
||||
file_monitor_proto_rawDesc = nil
|
||||
file_monitor_proto_goTypes = nil
|
||||
file_monitor_proto_depIdxs = nil
|
||||
}
|
||||
163
plugin/monitor/pb/monitor.pb.gw.go
Normal file
@@ -0,0 +1,163 @@
|
||||
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
|
||||
// source: monitor.proto
|
||||
|
||||
/*
|
||||
Package pb is a reverse proxy.
|
||||
|
||||
It translates gRPC into RESTful JSON APIs.
|
||||
*/
|
||||
package pb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/grpclog"
|
||||
"google.golang.org/grpc/metadata"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// Suppress "imported and not used" errors
|
||||
var _ codes.Code
|
||||
var _ io.Reader
|
||||
var _ status.Status
|
||||
var _ = runtime.String
|
||||
var _ = utilities.NewDoubleArray
|
||||
var _ = metadata.Join
|
||||
|
||||
func request_Api_SearchTask_0(ctx context.Context, marshaler runtime.Marshaler, client ApiClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq SearchTaskRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
|
||||
msg, err := client.SearchTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
func local_request_Api_SearchTask_0(ctx context.Context, marshaler runtime.Marshaler, server ApiServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq SearchTaskRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
|
||||
msg, err := server.SearchTask(ctx, &protoReq)
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
// RegisterApiHandlerServer registers the http handlers for service Api to "mux".
|
||||
// UnaryRPC :call ApiServer directly.
|
||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
|
||||
// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterApiHandlerFromEndpoint instead.
|
||||
func RegisterApiHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ApiServer) error {
|
||||
|
||||
mux.Handle("POST", pattern_Api_SearchTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
var stream runtime.ServerTransportStream
|
||||
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
var err error
|
||||
var annotatedContext context.Context
|
||||
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/monitor.Api/SearchTask", runtime.WithHTTPPathPattern("/monitor/api/search/task"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := local_request_Api_SearchTask_0(annotatedContext, inboundMarshaler, server, req, pathParams)
|
||||
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
||||
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_Api_SearchTask_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RegisterApiHandlerFromEndpoint is same as RegisterApiHandler but
|
||||
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
|
||||
func RegisterApiHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
|
||||
conn, err := grpc.DialContext(ctx, endpoint, opts...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
if cerr := conn.Close(); cerr != nil {
|
||||
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
|
||||
}
|
||||
return
|
||||
}
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
if cerr := conn.Close(); cerr != nil {
|
||||
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
|
||||
}
|
||||
}()
|
||||
}()
|
||||
|
||||
return RegisterApiHandler(ctx, mux, conn)
|
||||
}
|
||||
|
||||
// RegisterApiHandler registers the http handlers for service Api to "mux".
|
||||
// The handlers forward requests to the grpc endpoint over "conn".
|
||||
func RegisterApiHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
|
||||
return RegisterApiHandlerClient(ctx, mux, NewApiClient(conn))
|
||||
}
|
||||
|
||||
// RegisterApiHandlerClient registers the http handlers for service Api
|
||||
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ApiClient".
|
||||
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ApiClient"
|
||||
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
|
||||
// "ApiClient" to call the correct interceptors.
|
||||
func RegisterApiHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ApiClient) error {
|
||||
|
||||
mux.Handle("POST", pattern_Api_SearchTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
var err error
|
||||
var annotatedContext context.Context
|
||||
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/monitor.Api/SearchTask", runtime.WithHTTPPathPattern("/monitor/api/search/task"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := request_Api_SearchTask_0(annotatedContext, inboundMarshaler, client, req, pathParams)
|
||||
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_Api_SearchTask_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
var (
|
||||
pattern_Api_SearchTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"monitor", "api", "search", "task"}, ""))
|
||||
)
|
||||
|
||||
var (
|
||||
forward_Api_SearchTask_0 = runtime.ForwardResponseMessage
|
||||
)
|
||||
34
plugin/monitor/pb/monitor.proto
Normal file
@@ -0,0 +1,34 @@
|
||||
syntax = "proto3";
|
||||
import "google/api/annotations.proto";
|
||||
//import "google/protobuf/empty.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
package monitor;
|
||||
option go_package="m7s.live/m7s/v5/plugin/monitor/pb";
|
||||
|
||||
service api {
|
||||
rpc SearchTask (SearchTaskRequest) returns (SearchTaskResponse) {
|
||||
option (google.api.http) = {
|
||||
post: "/monitor/api/search/task"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
message SearchTaskRequest {
|
||||
}
|
||||
|
||||
message Task {
|
||||
uint32 id = 1;
|
||||
string owner = 2;
|
||||
uint32 type = 3;
|
||||
google.protobuf.Timestamp startTime = 4;
|
||||
google.protobuf.Timestamp endTime = 5;
|
||||
string description = 6;
|
||||
string reason = 7;
|
||||
}
|
||||
|
||||
message SearchTaskResponse {
|
||||
uint32 code = 1;
|
||||
string message = 2;
|
||||
repeated Task data = 3;
|
||||
}
|
||||
105
plugin/monitor/pb/monitor_grpc.pb.go
Normal file
@@ -0,0 +1,105 @@
|
||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||
// versions:
|
||||
// - protoc-gen-go-grpc v1.2.0
|
||||
// - protoc v3.19.1
|
||||
// source: monitor.proto
|
||||
|
||||
package pb
|
||||
|
||||
import (
|
||||
context "context"
|
||||
grpc "google.golang.org/grpc"
|
||||
codes "google.golang.org/grpc/codes"
|
||||
status "google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the grpc package it is being compiled against.
|
||||
// Requires gRPC-Go v1.32.0 or later.
|
||||
const _ = grpc.SupportPackageIsVersion7
|
||||
|
||||
// ApiClient is the client API for Api service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||
type ApiClient interface {
|
||||
SearchTask(ctx context.Context, in *SearchTaskRequest, opts ...grpc.CallOption) (*SearchTaskResponse, error)
|
||||
}
|
||||
|
||||
type apiClient struct {
|
||||
cc grpc.ClientConnInterface
|
||||
}
|
||||
|
||||
func NewApiClient(cc grpc.ClientConnInterface) ApiClient {
|
||||
return &apiClient{cc}
|
||||
}
|
||||
|
||||
func (c *apiClient) SearchTask(ctx context.Context, in *SearchTaskRequest, opts ...grpc.CallOption) (*SearchTaskResponse, error) {
|
||||
out := new(SearchTaskResponse)
|
||||
err := c.cc.Invoke(ctx, "/monitor.api/SearchTask", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// ApiServer is the server API for Api service.
|
||||
// All implementations must embed UnimplementedApiServer
|
||||
// for forward compatibility
|
||||
type ApiServer interface {
|
||||
SearchTask(context.Context, *SearchTaskRequest) (*SearchTaskResponse, error)
|
||||
mustEmbedUnimplementedApiServer()
|
||||
}
|
||||
|
||||
// UnimplementedApiServer must be embedded to have forward compatible implementations.
|
||||
type UnimplementedApiServer struct {
|
||||
}
|
||||
|
||||
func (UnimplementedApiServer) SearchTask(context.Context, *SearchTaskRequest) (*SearchTaskResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method SearchTask not implemented")
|
||||
}
|
||||
func (UnimplementedApiServer) mustEmbedUnimplementedApiServer() {}
|
||||
|
||||
// UnsafeApiServer may be embedded to opt out of forward compatibility for this service.
|
||||
// Use of this interface is not recommended, as added methods to ApiServer will
|
||||
// result in compilation errors.
|
||||
type UnsafeApiServer interface {
|
||||
mustEmbedUnimplementedApiServer()
|
||||
}
|
||||
|
||||
func RegisterApiServer(s grpc.ServiceRegistrar, srv ApiServer) {
|
||||
s.RegisterService(&Api_ServiceDesc, srv)
|
||||
}
|
||||
|
||||
func _Api_SearchTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(SearchTaskRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(ApiServer).SearchTask(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/monitor.api/SearchTask",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(ApiServer).SearchTask(ctx, req.(*SearchTaskRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Api_ServiceDesc is the grpc.ServiceDesc for Api service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
var Api_ServiceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "monitor.api",
|
||||
HandlerType: (*ApiServer)(nil),
|
||||
Methods: []grpc.MethodDesc{
|
||||
{
|
||||
MethodName: "SearchTask",
|
||||
Handler: _Api_SearchTask_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "monitor.proto",
|
||||
}
|
||||
19
plugin/monitor/pkg/schema-task.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package monitor
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Task struct {
|
||||
ID uint32 `gorm:"primarykey"`
|
||||
CreatedAt time.Time
|
||||
StartTime time.Time
|
||||
OwnerType string
|
||||
TaskType byte
|
||||
Description string
|
||||
Reason string
|
||||
}
|
||||
|
||||
func (i *Task) GetKey() uint32 {
|
||||
return i.ID
|
||||
}
|
||||