feat: console add task tree ui

This commit is contained in:
langhuihui
2024-08-18 22:18:39 +08:00
parent 5cc3fdecf9
commit 3d0609e4a8
86 changed files with 21046 additions and 33 deletions

View File

@@ -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"

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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)
}

View 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

View 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}

View 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};

File diff suppressed because one or more lines are too long

View 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}

View 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}

View 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};

Binary file not shown.

View 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 _};

View File

@@ -0,0 +1 @@
.events[data-v-8e73e23e]{width:100%;height:300px}

View 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};

View 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};

View 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};

View 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}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.n-gradient-text[data-v-541c4362]{font-size:24px}

View 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};

View File

@@ -0,0 +1 @@
.btn[data-v-3d86ca19]{width:100px}

View File

@@ -0,0 +1 @@
.top[data-v-4b5c61c2]{display:flex}.n-gradient-text[data-v-4b5c61c2]{font-size:24px}

View 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}

View 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};

View 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}

View 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};

View 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数据采集时长区间: 199 秒, 不填默认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};

File diff suppressed because one or more lines are too long

View 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};

View 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};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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};

File diff suppressed because one or more lines are too long

View 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};

View 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}}

View 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}

View 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 _};

View File

@@ -0,0 +1 @@
.jsonEditor[data-v-2df35383]{min-height:80vh}.pre[data-v-2df35383]{width:auto}

View 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};

File diff suppressed because one or more lines are too long

View 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};

View 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}}

View 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};

View 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};

File diff suppressed because one or more lines are too long

View 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}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View 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

View 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

View 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

File diff suppressed because one or more lines are too long

View 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};

View File

@@ -0,0 +1 @@
.top[data-v-6d0a1b16]{display:flex}.n-gradient-text[data-v-6d0a1b16]{font-size:24px}

View 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};

File diff suppressed because one or more lines are too long

View 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}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 KiB

View 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>

File diff suppressed because one or more lines are too long

View 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)
);

View 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));

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View 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
View 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
}

View File

@@ -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
}

View 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
}

View 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
)

View 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;
}

View 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",
}

View 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
}