Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
SkyAPM
SkyAPM-php-sdk
提交
34924539
S
SkyAPM-php-sdk
项目概览
SkyAPM
/
SkyAPM-php-sdk
通知
14
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyAPM-php-sdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
34924539
编写于
3月 18, 2020
作者:
H
heyanlong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bugs
上级
7da396fe
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
69 addition
and
58 deletion
+69
-58
agent/cmd/main.go
agent/cmd/main.go
+1
-1
agent/service/agent.go
agent/service/agent.go
+35
-27
agent/service/heartbeat.go
agent/service/heartbeat.go
+4
-5
agent/service/register.go
agent/service/register.go
+21
-17
agent/service/trace.go
agent/service/trace.go
+7
-7
php_skywalking.h
php_skywalking.h
+1
-1
未找到文件。
agent/cmd/main.go
浏览文件 @
34924539
...
...
@@ -20,7 +20,7 @@ func main() {
app
:=
cli
.
NewApp
()
app
.
Name
=
"sky_php_agent"
app
.
Usage
=
"the skywalking trace sending agent"
app
.
Version
=
"3.2.
6
"
app
.
Version
=
"3.2.
7
"
app
.
Flags
=
[]
cli
.
Flag
{
&
cli
.
StringSliceFlag
{
Name
:
"grpc"
,
Usage
:
"SkyWalking collector grpc address"
,
Value
:
cli
.
NewStringSlice
(
"127.0.0.1:11800"
)},
&
cli
.
StringFlag
{
Name
:
"socket"
,
Usage
:
"Pipeline for communicating with PHP"
,
Value
:
"/var/run/sky-agent.sock"
},
...
...
agent/service/agent.go
浏览文件 @
34924539
...
...
@@ -5,8 +5,6 @@ import (
"agent/agent/pb/agent"
"agent/agent/pb/agent2"
"agent/agent/pb/register2"
"container/list"
"fmt"
cli
"github.com/urfave/cli/v2"
"google.golang.org/grpc"
"math/rand"
...
...
@@ -38,19 +36,20 @@ type Agent struct {
socket
string
socketListener
net
.
Listener
register
chan
*
register
registerCache
sync
.
Map
registerCacheLock
sync
.
Mutex
registerCache
map
[
int
]
registerCache
registerCacheLock
sync
.
RW
Mutex
trace
chan
string
queue
*
list
.
List
queue
[]
string
queueLock
sync
.
Mutex
}
func
NewAgent
(
cli
*
cli
.
Context
)
*
Agent
{
var
agent
=
&
Agent
{
flag
:
cli
,
socket
:
cli
.
String
(
"socket"
),
register
:
make
(
chan
*
register
),
trace
:
make
(
chan
string
),
queue
:
list
.
New
(
),
flag
:
cli
,
socket
:
cli
.
String
(
"socket"
),
register
:
make
(
chan
*
register
),
trace
:
make
(
chan
string
),
registerCache
:
make
(
map
[
int
]
registerCache
),
}
go
agent
.
sub
()
...
...
@@ -60,22 +59,25 @@ func NewAgent(cli *cli.Context) *Agent {
func
(
t
*
Agent
)
Run
()
{
log
.
Info
(
"hello skywalking"
)
t
.
connGRPC
()
t
.
listenSocket
()
log
.
Info
(
"🍺 skywalking php agent started successfully, enjoy yourself"
)
defer
func
()
{
var
err
error
err
=
t
.
socketListener
.
Close
()
if
err
!=
nil
{
log
.
Errorln
(
err
)
if
t
.
socketListener
!=
nil
{
err
=
t
.
socketListener
.
Close
()
if
err
!=
nil
{
log
.
Errorln
(
err
)
}
}
err
=
t
.
grpcConn
.
Close
()
if
err
!=
nil
{
log
.
Errorln
(
err
)
if
t
.
grpcConn
!=
nil
{
err
=
t
.
grpcConn
.
Close
()
if
err
!=
nil
{
log
.
Errorln
(
err
)
}
}
}()
t
.
connGRPC
()
t
.
listenSocket
()
}
func
(
t
*
Agent
)
connGRPC
()
{
...
...
@@ -99,6 +101,7 @@ func (t *Agent) connGRPC() {
t
.
grpcClient
.
segmentClientV6
=
agent2
.
NewTraceSegmentReportServiceClient
(
t
.
grpcConn
)
t
.
grpcClient
.
pingClient5
=
agent
.
NewInstanceDiscoveryServiceClient
(
t
.
grpcConn
)
t
.
grpcClient
.
pintClient6
=
register2
.
NewServiceInstancePingClient
(
t
.
grpcConn
)
log
.
Info
(
"🍺 skywalking php agent started successfully, enjoy yourself"
)
}
func
(
t
*
Agent
)
listenSocket
()
{
...
...
@@ -144,17 +147,21 @@ func (t *Agent) sub() {
for
{
select
{
case
<-
traceSendTicker
.
C
:
len
:=
t
.
queue
.
Len
(
)
len
:=
len
(
t
.
queue
)
if
len
>
0
{
var
segments
[]
*
upstreamSegment
for
i
:=
0
;
i
<
len
;
i
++
{
// front top 100
e
:=
t
.
queue
.
Front
()
st
:=
format
(
fmt
.
Sprintf
(
"%v"
,
e
.
Value
))
t
.
queueLock
.
Lock
()
list
:=
t
.
queue
[
:
]
t
.
queue
=
[]
string
{}
t
.
queueLock
.
Unlock
()
for
_
,
trace
:=
range
list
{
info
,
st
:=
format
(
trace
)
if
st
!=
nil
{
t
.
recoverRegister
(
info
)
segments
=
append
(
segments
,
st
)
}
t
.
queue
.
Remove
(
e
)
}
go
t
.
send
(
segments
)
}
...
...
@@ -163,8 +170,9 @@ func (t *Agent) sub() {
case
register
:=
<-
t
.
register
:
go
t
.
doRegister
(
register
)
case
trace
:=
<-
t
.
trace
:
t
.
queue
.
PushBack
(
trace
)
go
t
.
recoverRegister
(
trace
)
t
.
queueLock
.
Lock
()
t
.
queue
=
append
(
t
.
queue
,
trace
)
t
.
queueLock
.
Unlock
()
}
}
}
agent/service/heartbeat.go
浏览文件 @
34924539
...
...
@@ -9,10 +9,10 @@ import (
func
(
t
*
Agent
)
heartbeat
()
{
t
.
registerCache
.
Range
(
func
(
key
,
value
interface
{})
bool
{
t
.
registerCacheLock
.
Lock
()
defer
t
.
registerCacheLock
.
Unlock
()
for
_
,
bind
:=
range
t
.
registerCache
{
log
.
Infoln
(
"heartbeat"
)
bind
:=
value
.
(
registerCache
)
if
bind
.
Version
==
5
{
ctx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
time
.
Second
*
3
)
defer
cancel
()
...
...
@@ -43,6 +43,5 @@ func (t *Agent) heartbeat() {
log
.
Infof
(
"heartbeat appId %d appInsId %d"
,
bind
.
AppId
,
bind
.
InstanceId
)
}
}
return
true
})
}
}
agent/service/register.go
浏览文件 @
34924539
...
...
@@ -42,18 +42,21 @@ func ip4s() []string {
return
ips
}
func
(
t
*
Agent
)
recoverRegister
(
r
string
)
{
var
info
trace
err
:=
json
.
Unmarshal
([]
byte
(
r
),
&
info
)
if
err
==
nil
{
if
_
,
ok
:=
t
.
registerCache
.
Load
(
info
.
Pid
);
!
ok
{
t
.
registerCache
.
Store
(
info
.
Pid
,
registerCache
{
Version
:
info
.
Version
,
AppId
:
info
.
ApplicationId
,
InstanceId
:
info
.
ApplicationInstance
,
Uuid
:
info
.
Uuid
,
})
func
(
t
*
Agent
)
recoverRegister
(
info
trace
)
{
t
.
registerCacheLock
.
RLock
()
_
,
ok
:=
t
.
registerCache
[
info
.
Pid
]
t
.
registerCacheLock
.
RUnlock
()
if
!
ok
{
t
.
registerCacheLock
.
Lock
()
t
.
registerCache
[
info
.
Pid
]
=
registerCache
{
Version
:
info
.
Version
,
AppId
:
info
.
ApplicationId
,
InstanceId
:
info
.
ApplicationInstance
,
Uuid
:
info
.
Uuid
,
}
t
.
registerCacheLock
.
Unlock
()
}
}
...
...
@@ -68,8 +71,10 @@ func (t *Agent) doRegister(r *register) {
}
pid
:=
info
.
Pid
if
value
,
ok
:=
t
.
registerCache
.
Load
(
pid
);
ok
{
bind
:=
value
.
(
registerCache
)
t
.
registerCacheLock
.
RLock
()
bind
,
ok
:=
t
.
registerCache
[
pid
]
t
.
registerCacheLock
.
RUnlock
()
if
ok
{
log
.
Infof
(
"register => pid %d appid %d insId %d"
,
pid
,
bind
.
AppId
,
bind
.
InstanceId
)
r
.
c
.
Write
([]
byte
(
strconv
.
FormatInt
(
int64
(
bind
.
AppId
),
10
)
+
","
+
strconv
.
FormatInt
(
int64
(
bind
.
InstanceId
),
10
)
+
","
+
bind
.
Uuid
))
return
...
...
@@ -79,9 +84,8 @@ func (t *Agent) doRegister(r *register) {
t
.
registerCacheLock
.
Lock
()
defer
t
.
registerCacheLock
.
Unlock
()
// if map not found pid.. start register
if
_
,
ok
:=
t
.
registerCache
.
Load
(
pid
);
!
ok
{
if
!
ok
{
log
.
Infof
(
"start register pid %d used SkyWalking v%d"
,
pid
,
info
.
Version
)
var
regAppStatus
=
false
var
appId
int32
=
0
...
...
@@ -254,12 +258,12 @@ func (t *Agent) doRegister(r *register) {
}
if
appInsId
!=
0
{
t
.
registerCache
.
Store
(
pid
,
registerCache
{
t
.
registerCache
[
pid
]
=
registerCache
{
Version
:
info
.
Version
,
AppId
:
appId
,
InstanceId
:
appInsId
,
Uuid
:
agentUUID
,
}
)
}
log
.
Infof
(
"register pid %d appid %d insId %d"
,
pid
,
appId
,
appInsId
)
}
}
else
{
...
...
agent/service/trace.go
浏览文件 @
34924539
...
...
@@ -123,13 +123,13 @@ func (t *Agent) send(segments []*upstreamSegment) {
log
.
Info
(
"sending success..."
)
}
func
format
(
j
string
)
*
upstreamSegment
{
func
format
(
j
string
)
(
trace
,
*
upstreamSegment
)
{
info
:=
trace
{}
err
:=
json
.
Unmarshal
([]
byte
(
j
),
&
info
)
if
err
!=
nil
{
log
.
Error
(
"trace json decode:"
,
err
)
return
nil
return
info
,
nil
}
if
info
.
Version
==
5
{
var
globalTrace
[]
*
agent
.
UniqueId
...
...
@@ -190,14 +190,14 @@ func format(j string) *upstreamSegment {
//log.Info(seg)
if
err
!=
nil
{
log
.
Error
(
"trace json encode:"
,
err
)
return
nil
return
info
,
nil
}
segment
:=
&
agent
.
UpstreamSegment
{
GlobalTraceIds
:
globalTrace
,
Segment
:
seg
,
}
return
&
upstreamSegment
{
return
info
,
&
upstreamSegment
{
Version
:
info
.
Version
,
segment
:
segment
,
}
...
...
@@ -261,7 +261,7 @@ func format(j string) *upstreamSegment {
//log.Info(seg)
if
err
!=
nil
{
log
.
Error
(
"trace proto encode:"
,
err
)
return
nil
return
info
,
nil
}
segment
:=
&
agent
.
UpstreamSegment
{
...
...
@@ -269,12 +269,12 @@ func format(j string) *upstreamSegment {
Segment
:
seg
,
}
return
&
upstreamSegment
{
return
info
,
&
upstreamSegment
{
Version
:
info
.
Version
,
segment
:
segment
,
}
}
return
nil
return
info
,
nil
}
func
buildRefs
(
span
*
agent
.
SpanObject
,
refs
[]
ref
)
{
...
...
php_skywalking.h
浏览文件 @
34924539
...
...
@@ -25,7 +25,7 @@ extern zend_module_entry skywalking_module_entry;
#define phpext_skywalking_ptr &skywalking_module_entry
#define SKY_DEBUG 0
#define PHP_SKYWALKING_VERSION "3.2.
6
"
/* Replace with version number for your extension */
#define PHP_SKYWALKING_VERSION "3.2.
7
"
/* Replace with version number for your extension */
#ifdef PHP_WIN32
# define PHP_SKYWALKING_API __declspec(dllexport)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录