You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by al...@apache.org on 2020/08/23 06:52:55 UTC
[skywalking-python] branch urllib3 created (now 1bfa47c)
This is an automated email from the ASF dual-hosted git repository.
alonelaval pushed a change to branch urllib3
in repository https://gitbox.apache.org/repos/asf/skywalking-python.git.
at 1bfa47c changed kubernetes to urllib3
This branch includes the following new commits:
new 1bfa47c changed kubernetes to urllib3
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[skywalking-python] 01/01: changed kubernetes to urllib3
Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
alonelaval pushed a commit to branch urllib3
in repository https://gitbox.apache.org/repos/asf/skywalking-python.git
commit 1bfa47c94c9316615d7fbcb06db02cb95d7274aa
Author: huawei <hu...@bit-s.cn>
AuthorDate: Sun Aug 23 14:52:29 2020 +0800
changed kubernetes to urllib3
---
.github/workflows/build.yaml | 6 --
docs/Plugins.md | 2 +-
requirements.txt | 12 +++-
setup.py | 2 +-
skywalking/__init__.py | 2 +-
.../plugins/{sw_kubernetes.py => sw_urllib3.py} | 30 ++++----
.../services => sw_urllib3}/__init__.py | 0
.../docker-compose.yml | 22 +++++-
.../expected.data.yml | 82 ++++++++--------------
.../services}/__init__.py | 0
.../services/consumer.py | 20 ++----
.../services/provider.py} | 21 ++----
.../test_urllib3.py} | 3 +-
13 files changed, 93 insertions(+), 109 deletions(-)
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index bbec008..69d871c 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -39,12 +39,6 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- - name: Setup k3s
- run: curl -sfL https://get.k3s.io | sh -
- - name: set kubeconfig
- env:
- KUBECONFIG: /etc/rancher/k3s/k3s.yaml
- run: sudo mkdir ~/.kube && sudo cp ${KUBECONFIG} ~/.kube/config
- name: Set up dependencies
run: make setup install
- name: Lint codes
diff --git a/docs/Plugins.md b/docs/Plugins.md
index 7a579c0..4ed549d 100644
--- a/docs/Plugins.md
+++ b/docs/Plugins.md
@@ -31,7 +31,7 @@ Library | Versions | Plugin Name
| [pika](https://pika.readthedocs.io/en/stable/) | 1.1.0 | `sw_rabbitmq` |
| [pymongo](https://pymongo.readthedocs.io/en/stable/) | 3.11.0 | `sw_pymongo` |
| [elasticsearch](https://github.com/elastic/elasticsearch-py) | 7.9.0 | `sw_elasticsearch` |
-| [kubernetes](https://github.com/kubernetes-client/python) | 11.0.0 | `sw_kubernetes` |
+| [urllib3](https://urllib3.readthedocs.io/en/latest/) | 1.25.10 | `sw_urllib3` |
The column `Versions` only indicates that the versions are tested, if you found the newer versions are also supported, welcome to add the newer version into the table.
>>>>>>> master
diff --git a/requirements.txt b/requirements.txt
index 7fb382b..68ebe78 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,8 @@
+apache-skywalking==0.2.0
asgiref==3.2.10
attrs==19.3.0
blindspin==2.0.1
+cachetools==4.1.1
certifi==2020.6.20
chardet==3.0.4
click==7.1.2
@@ -12,9 +14,11 @@ docker==4.2.2
elasticsearch==7.8.0
Flask==1.1.2
gevent==20.6.2
+google-auth==1.20.1
greenlet==0.4.16
grpcio==1.31.0
grpcio-tools==1.31.0
+gunicorn==20.0.4
idna==2.10
importlib-metadata==1.7.0
iniconfig==1.0.1
@@ -23,30 +27,36 @@ Jinja2==2.11.2
kafka-python==2.0.1
MarkupSafe==1.1.1
more-itertools==8.4.0
+oauthlib==3.1.0
packaging==20.4
parameterized==0.7.4
pika==1.1.0
pluggy==0.13.1
protobuf==3.12.4
py==1.9.0
+pyasn1==0.4.8
+pyasn1-modules==0.2.8
pymongo==3.11.0
PyMySQL==0.10.0
pyparsing==2.4.7
pytest==6.0.1
+python-dateutil==2.8.1
pytz==2020.1
PyYAML==5.3.1
redis==3.5.3
requests==2.24.0
+requests-oauthlib==1.3.0
+rsa==4.6
six==1.15.0
sqlparse==0.3.1
testcontainers==3.0.3
toml==0.10.1
tornado==6.0.4
urllib3==1.25.10
+uWSGI==2.0.19.1
websocket-client==0.57.0
Werkzeug==1.0.1
wrapt==1.12.1
-kubernetes==11.0.0
zipp==3.1.0
zope.event==4.4
zope.interface==5.1.0
diff --git a/setup.py b/setup.py
index 98a00c2..4d3f669 100644
--- a/setup.py
+++ b/setup.py
@@ -54,7 +54,7 @@ setup(
"pika",
"pymongo",
"elasticsearch",
- "kubernetes",
+ "urllib3",
"pytest",
],
},
diff --git a/skywalking/__init__.py b/skywalking/__init__.py
index 005e93a..6df8ecb 100644
--- a/skywalking/__init__.py
+++ b/skywalking/__init__.py
@@ -36,7 +36,7 @@ class Component(Enum):
RabbitmqProducer = 52
RabbitmqConsumer = 53
Elasticsearch = 47
- Kubernetes = 96
+ Urllib3 = 7006
class Layer(Enum):
diff --git a/skywalking/plugins/sw_kubernetes.py b/skywalking/plugins/sw_urllib3.py
similarity index 69%
rename from skywalking/plugins/sw_kubernetes.py
rename to skywalking/plugins/sw_urllib3.py
index f6af33a..a8fc984 100644
--- a/skywalking/plugins/sw_kubernetes.py
+++ b/skywalking/plugins/sw_urllib3.py
@@ -19,6 +19,7 @@ import logging
from skywalking import Layer, Component
from skywalking.trace import tags
+from skywalking.trace.carrier import Carrier
from skywalking.trace.context import get_context
from skywalking.trace.tags import Tag
@@ -28,25 +29,30 @@ logger = logging.getLogger(__name__)
def install():
# noinspection PyBroadException
try:
- from kubernetes.client.rest import RESTClientObject
+ from urllib3.request import RequestMethods
- _request = RESTClientObject.request
+ _request = RequestMethods.request
- def _sw_request(this: RESTClientObject, method, url, query_params=None, headers=None,
- body=None, post_params=None, _preload_content=True,
- _request_timeout=None):
+ def _sw_request(this: RequestMethods, method, url, fields=None, headers=None, **urlopen_kw):
from urllib.parse import urlparse
url_param = urlparse(url)
-
+ carrier = Carrier()
context = get_context()
- with context.new_exit_span(op=url_param.path or "/", peer=url_param.netloc) as span:
+ with context.new_exit_span(op=url_param.path or "/", peer=url_param.netloc, carrier=carrier) as span:
span.layer = Layer.Http
- span.component = Component.Kubernetes
+ span.component = Component.Urllib3
+
+ if headers is None:
+ headers = {}
+ for item in carrier:
+ headers[item.key] = item.val
+ else:
+ for item in carrier:
+ headers[item.key] = item.val
+
try:
- res = _request(this, method, url, query_params=query_params, headers=headers,
- post_params=post_params, body=body, _preload_content=_preload_content,
- _request_timeout=_request_timeout)
+ res = _request(this, method, url, fields=fields, headers=headers, **urlopen_kw)
span.tag(Tag(key=tags.HttpMethod, val=method.upper()))
span.tag(Tag(key=tags.HttpUrl, val=url))
@@ -58,6 +64,6 @@ def install():
raise e
return res
- RESTClientObject.request = _sw_request
+ RequestMethods.request = _sw_request
except Exception:
logger.warning('failed to install plugin %s', __name__)
diff --git a/tests/plugin/sw_kubernates/services/__init__.py b/tests/plugin/sw_urllib3/__init__.py
similarity index 100%
rename from tests/plugin/sw_kubernates/services/__init__.py
rename to tests/plugin/sw_urllib3/__init__.py
diff --git a/tests/plugin/sw_kubernates/docker-compose.yml b/tests/plugin/sw_urllib3/docker-compose.yml
similarity index 64%
rename from tests/plugin/sw_kubernates/docker-compose.yml
rename to tests/plugin/sw_urllib3/docker-compose.yml
index 4d2bb8d..d9683a9 100644
--- a/tests/plugin/sw_kubernates/docker-compose.yml
+++ b/tests/plugin/sw_urllib3/docker-compose.yml
@@ -23,6 +23,24 @@ services:
service: collector
file: ../docker/docker-compose.base.yml
+ provider:
+ extends:
+ service: agent
+ file: ../docker/docker-compose.base.yml
+ ports:
+ - 9091:9091
+ volumes:
+ - .:/app
+ command: ['bash', '-c', 'pip install flask && pip install -r /app/requirements.txt && python3 /app/services/provider.py']
+ depends_on:
+ collector:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9091"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+
consumer:
extends:
service: agent
@@ -31,10 +49,12 @@ services:
- 9090:9090
volumes:
- ./services/consumer.py:/app/consumer.py
- command: ['bash', '-c', 'pip install flask && pip install kubernetes && python3 /app/consumer.py']
+ command: ['bash', '-c', 'pip install flask && pip install urllib3 && python3 /app/consumer.py']
depends_on:
collector:
condition: service_healthy
+ provider:
+ condition: service_healthy
networks:
beyond:
diff --git a/tests/plugin/sw_kubernates/expected.data.yml b/tests/plugin/sw_urllib3/expected.data.yml
similarity index 58%
rename from tests/plugin/sw_kubernates/expected.data.yml
rename to tests/plugin/sw_urllib3/expected.data.yml
index 8ce92f7..42f9c3c 100644
--- a/tests/plugin/sw_kubernates/expected.data.yml
+++ b/tests/plugin/sw_urllib3/expected.data.yml
@@ -15,86 +15,62 @@
# limitations under the License.
#
+
segmentItems:
- - serviceName: consumer
+ - serviceName: provider
segmentSize: 1
segments:
- segmentId: not null
spans:
- - operationName: /api/v1/namespaces
+ - operationName: /users
operationId: 0
- parentSpanId: 0
- spanId: 1
+ parentSpanId: -1
+ spanId: 0
spanLayer: Http
- startTime: gt 0
- endTime: gt 0
- componentId: 96
- isError: false
- spanType: Exit
- peer: not null
- skipAnalysis: false
tags:
- key: http.method
- value: GET
+ value: POST
- key: url
- value: not null
+ value: http://provider:9091/users
- key: status.code
value: '200'
- - operationName: /api/v1/pods
- operationId: 0
- parentSpanId: 0
- spanId: 2
- spanLayer: Http
+ refs:
+ - parentEndpoint: /users
+ networkAddress: 'provider:9091'
+ refType: CrossProcess
+ parentSpanId: 1
+ parentTraceSegmentId: not null
+ parentServiceInstance: not null
+ parentService: consumer
+ traceId: not null
startTime: gt 0
endTime: gt 0
- componentId: 96
- isError: false
- spanType: Exit
- peer: not null
- skipAnalysis: false
- tags:
- - key: http.method
- value: GET
- - key: url
- value: not null
- - key: status.code
- value: '200'
- - operationName: /apis/apps/v1/deployments
- operationId: 0
- parentSpanId: 0
- spanId: 3
- spanLayer: Http
- startTime: gt 0
- endTime: gt 0
- componentId: 96
- isError: false
- spanType: Exit
+ componentId: 7001
+ spanType: Entry
peer: not null
skipAnalysis: false
- tags:
- - key: http.method
- value: GET
- - key: url
- value: not null
- - key: status.code
- value: '200'
- - operationName: /apis/networking.k8s.io/v1beta1/ingresses
+ - serviceName: consumer
+ segmentSize: 1
+ segments:
+ - segmentId: not null
+ spans:
+ - operationName: /users
operationId: 0
parentSpanId: 0
- spanId: 4
+ spanId: 1
spanLayer: Http
startTime: gt 0
endTime: gt 0
- componentId: 96
+ componentId: 7006
isError: false
spanType: Exit
peer: not null
skipAnalysis: false
tags:
- key: http.method
- value: GET
+ value: POST
- key: url
- value: not null
+ value: 'http://provider:9091/users'
- key: status.code
value: '200'
- operationName: /users
@@ -115,4 +91,4 @@ segmentItems:
- key: url
value: 'http://0.0.0.0:9090/users'
- key: status.code
- value: '200'
+ value: '200'
\ No newline at end of file
diff --git a/tests/plugin/sw_kubernates/__init__.py b/tests/plugin/sw_urllib3/services/__init__.py
similarity index 100%
rename from tests/plugin/sw_kubernates/__init__.py
rename to tests/plugin/sw_urllib3/services/__init__.py
diff --git a/tests/plugin/sw_kubernates/services/consumer.py b/tests/plugin/sw_urllib3/services/consumer.py
similarity index 69%
copy from tests/plugin/sw_kubernates/services/consumer.py
copy to tests/plugin/sw_urllib3/services/consumer.py
index 4b160c0..a039baf 100644
--- a/tests/plugin/sw_kubernates/services/consumer.py
+++ b/tests/plugin/sw_urllib3/services/consumer.py
@@ -14,11 +14,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-
+import json
from skywalking import agent, config
-
if __name__ == '__main__':
config.service_name = 'consumer'
config.logging_level = 'DEBUG'
@@ -26,25 +25,16 @@ if __name__ == '__main__':
from flask import Flask, jsonify
-
app = Flask(__name__)
+ import urllib3
@app.route("/users", methods=["POST", "GET"])
def application():
- from kubernetes import client
- import kubernetes.config as kube_config
- kube_config.load_kube_config()
- core_conn = client.CoreV1Api()
- apps_conn = client.AppsV1Api()
- net_conn = client.NetworkingV1beta1Api()
-
- core_conn.list_namespace()
- core_conn.list_pod_for_all_namespaces()
- apps_conn.list_deployment_for_all_namespaces()
- net_conn.list_ingress_for_all_namespaces()
- return jsonify({"song": "Despacito", "artist": "Luis Fonsi"})
+ http = urllib3.PoolManager()
+ res = http.request("POST", "http://provider:9091/users")
+ return jsonify(json.loads(res.data.decode('utf-8')))
PORT = 9090
app.run(host='0.0.0.0', port=PORT, debug=True)
diff --git a/tests/plugin/sw_kubernates/services/consumer.py b/tests/plugin/sw_urllib3/services/provider.py
similarity index 70%
rename from tests/plugin/sw_kubernates/services/consumer.py
rename to tests/plugin/sw_urllib3/services/provider.py
index 4b160c0..11f2c0b 100644
--- a/tests/plugin/sw_kubernates/services/consumer.py
+++ b/tests/plugin/sw_urllib3/services/provider.py
@@ -15,36 +15,23 @@
# limitations under the License.
#
+import time
from skywalking import agent, config
-
if __name__ == '__main__':
- config.service_name = 'consumer'
+ config.service_name = 'provider'
config.logging_level = 'DEBUG'
agent.start()
from flask import Flask, jsonify
-
app = Flask(__name__)
-
@app.route("/users", methods=["POST", "GET"])
def application():
- from kubernetes import client
- import kubernetes.config as kube_config
- kube_config.load_kube_config()
- core_conn = client.CoreV1Api()
- apps_conn = client.AppsV1Api()
- net_conn = client.NetworkingV1beta1Api()
-
- core_conn.list_namespace()
- core_conn.list_pod_for_all_namespaces()
- apps_conn.list_deployment_for_all_namespaces()
- net_conn.list_ingress_for_all_namespaces()
+ time.sleep(0.5)
return jsonify({"song": "Despacito", "artist": "Luis Fonsi"})
-
- PORT = 9090
+ PORT = 9091
app.run(host='0.0.0.0', port=PORT, debug=True)
diff --git a/tests/plugin/sw_kubernates/test_kubernates.py b/tests/plugin/sw_urllib3/test_urllib3.py
similarity index 95%
rename from tests/plugin/sw_kubernates/test_kubernates.py
rename to tests/plugin/sw_urllib3/test_urllib3.py
index d1f2f17..e56a82b 100644
--- a/tests/plugin/sw_kubernates/test_kubernates.py
+++ b/tests/plugin/sw_urllib3/test_urllib3.py
@@ -30,7 +30,8 @@ def prepare():
class TestPlugin(TestPluginBase):
@pytest.mark.parametrize('version', [
- 'kubernetes==11.0.0',
+ 'urllib3==1.25.10',
+ 'urllib3==1.25.9'
])
def test_plugin(self, docker_compose, version):
self.validate()