Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
skywalking-python
提交
19715ff1
S
skywalking-python
项目概览
apache
/
skywalking-python
通知
60
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skywalking-python
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
19715ff1
编写于
5月 06, 2020
作者:
K
kezhenxu94
提交者:
GitHub
5月 06, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Feature: support authentication in grpc (#3)
上级
a4f60a8d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
81 addition
and
0 deletion
+81
-0
skywalking/agent/protocol/grpc/__init__.py
skywalking/agent/protocol/grpc/__init__.py
+6
-0
skywalking/agent/protocol/grpc/interceptors.py
skywalking/agent/protocol/grpc/interceptors.py
+70
-0
skywalking/config/__init__.py
skywalking/config/__init__.py
+5
-0
未找到文件。
skywalking/agent/protocol/grpc/__init__.py
浏览文件 @
19715ff1
...
...
@@ -24,6 +24,8 @@ from common.Common_pb2 import KeyStringValuePair
from
language_agent.Tracing_pb2
import
SegmentObject
,
SpanObject
,
Log
from
skywalking
import
config
from
skywalking.agent
import
Protocol
from
skywalking.agent.protocol.grpc
import
interceptors
from
skywalking.agent.protocol.grpc.interceptors
import
header_adder_interceptor
from
skywalking.client.grpc
import
GrpcServiceManagementClient
,
GrpcTraceSegmentReportService
from
skywalking.trace.segment
import
Segment
...
...
@@ -34,6 +36,10 @@ class GrpcProtocol(Protocol):
def
__init__
(
self
):
self
.
state
=
None
self
.
channel
=
grpc
.
insecure_channel
(
config
.
collector_address
)
if
config
.
authentication
:
self
.
channel
=
grpc
.
intercept_channel
(
self
.
channel
,
header_adder_interceptor
(
'authentication'
,
config
.
authentication
)
)
def
cb
(
state
):
logger
.
debug
(
'grpc channel connectivity changed, [%s -> %s]'
,
self
.
state
,
state
)
...
...
skywalking/agent/protocol/grpc/interceptors.py
0 → 100644
浏览文件 @
19715ff1
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from
collections
import
namedtuple
import
grpc
class
_ClientInterceptor
(
grpc
.
UnaryUnaryClientInterceptor
,
grpc
.
UnaryStreamClientInterceptor
,
grpc
.
StreamUnaryClientInterceptor
,
grpc
.
StreamStreamClientInterceptor
):
def
__init__
(
self
,
interceptor_function
):
self
.
_fn
=
interceptor_function
def
intercept_unary_unary
(
self
,
continuation
,
client_call_details
,
request
):
new_details
,
new_request_iterator
,
postprocess
=
self
.
_fn
(
client_call_details
,
iter
((
request
,)),
False
,
False
)
response
=
continuation
(
new_details
,
next
(
new_request_iterator
))
return
postprocess
(
response
)
if
postprocess
else
response
def
intercept_unary_stream
(
self
,
continuation
,
client_call_details
,
request
):
new_details
,
new_request_iterator
,
postprocess
=
self
.
_fn
(
client_call_details
,
iter
((
request
,)),
False
,
True
)
response_it
=
continuation
(
new_details
,
next
(
new_request_iterator
))
return
postprocess
(
response_it
)
if
postprocess
else
response_it
def
intercept_stream_unary
(
self
,
continuation
,
client_call_details
,
request_iterator
):
new_details
,
new_request_iterator
,
postprocess
=
self
.
_fn
(
client_call_details
,
request_iterator
,
True
,
False
)
response
=
continuation
(
new_details
,
new_request_iterator
)
return
postprocess
(
response
)
if
postprocess
else
response
def
intercept_stream_stream
(
self
,
continuation
,
client_call_details
,
request_iterator
):
new_details
,
new_request_iterator
,
postprocess
=
self
.
_fn
(
client_call_details
,
request_iterator
,
True
,
True
)
response_it
=
continuation
(
new_details
,
new_request_iterator
)
return
postprocess
(
response_it
)
if
postprocess
else
response_it
def
create
(
intercept_call
):
return
_ClientInterceptor
(
intercept_call
)
ClientCallDetails
=
namedtuple
(
'ClientCallDetails'
,
(
'method'
,
'timeout'
,
'metadata'
,
'credentials'
))
def
header_adder_interceptor
(
header
,
value
):
def
intercept_call
(
client_call_details
,
request_iterator
,
request_streaming
,
response_streaming
):
metadata
=
list
(
client_call_details
.
metadata
or
())
metadata
.
append
((
header
,
value
))
client_call_details
=
ClientCallDetails
(
client_call_details
.
method
,
client_call_details
.
timeout
,
metadata
,
client_call_details
.
credentials
,
)
return
client_call_details
,
request_iterator
,
None
return
create
(
intercept_call
)
skywalking/config/__init__.py
浏览文件 @
19715ff1
...
...
@@ -22,6 +22,7 @@ service_name = os.getenv('SW_AGENT_NAME') or 'Python Service Name' # type: str
service_instance
=
os
.
getenv
(
'SW_AGENT_INSTANCE'
)
or
str
(
uuid
.
uuid1
()).
replace
(
'-'
,
''
)
# type: str
collector_address
=
os
.
getenv
(
'SW_AGENT_COLLECTOR_BACKEND_SERVICES'
)
or
'127.0.0.1:11800'
# type: str
protocol
=
os
.
getenv
(
'SW_AGENT_PROTOCOL'
)
or
'grpc'
# type: str
authentication
=
os
.
getenv
(
'SW_AGENT_AUTHENTICATION'
)
def
init
(
...
...
@@ -29,6 +30,7 @@ def init(
instance
:
str
=
None
,
collector
:
str
=
None
,
protocol_type
:
str
=
'grpc'
,
token
:
str
=
None
,
):
global
service_name
service_name
=
service
or
service_name
...
...
@@ -41,3 +43,6 @@ def init(
global
protocol
protocol
=
protocol_type
or
protocol
global
authentication
authentication
=
token
or
authentication
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录