/
pull.go
65 lines (54 loc) · 1.39 KB
/
pull.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package agent
import (
"encoding/base64"
"github.com/TeaWeb/build/internal/teaconfigs/agents"
"github.com/TeaWeb/build/internal/teaweb/actions/default/agents/agentutils"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/types"
"math"
"time"
)
type PullAction actions.Action
// 拉取事件
func (this *PullAction) Run(params struct{}) {
agentId := this.Context.Get("agent").(*agents.AgentConfig).Id
agentVersion := this.Request.Header.Get("Tea-Agent-Version")
agentOsName := this.Request.Header.Get("Tea-Agent-OsName")
nano := this.Request.Header.Get("Tea-Agent-Nano")
speed := float64(0)
if len(nano) > 0 {
speed = math.Ceil(float64(time.Now().UnixNano()-types.Int64(nano))*1000/1000000) / 1000
if speed < 0 {
speed = -speed
}
}
osName := ""
if len(agentOsName) > 0 {
data, err := base64.StdEncoding.DecodeString(agentOsName)
if err == nil {
osName = string(data)
}
}
state := agentutils.FindAgentState(agentId)
state.IsActive = true
state.Version = agentVersion
state.OsName = osName
state.Speed = speed
state.IP = this.RequestRemoteIP()
isDone := false
go func() {
<-this.Request.Context().Done()
if !isDone {
state.IsActive = false
}
}()
event := agentutils.Wait(agentId)
state.IsActive = false
isDone = true
events := []*agentutils.AgentEvent{}
if event != nil {
events = append(events, event)
}
this.Data["events"] = events
this.Success()
}