You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/02/27 01:23:53 UTC
[skywalking-nginx-lua] 01/01: Revert "feature: add CI and test
cases for ngx lua. (#3)"
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch test
in repository https://gitbox.apache.org/repos/asf/skywalking-nginx-lua.git
commit cd39379e5e2d9cc9f3f50cb00be25637fbf8b4f2
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Thu Feb 27 09:21:59 2020 +0800
Revert "feature: add CI and test cases for ngx lua. (#3)"
This reverts commit ac4ba62db712fc20ff7422f31b267923419b0fb5.
---
.github/workflows/ci.yaml | 29 ++--------
lib/skywalking/segment.lua | 10 ++--
lib/skywalking/segment_ref.lua | 21 +++----
lib/skywalking/tracing_context.lua | 18 +++---
lib/skywalking/util.lua | 115 +++++++++++++------------------------
lib/skywalking/util_test.lua | 14 ++---
t/util.t | 96 -------------------------------
7 files changed, 79 insertions(+), 224 deletions(-)
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index f735fe3..05972cf 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -19,10 +19,11 @@ name: CI
on:
pull_request:
push:
- branches:
+ branches:
- master
tags:
- 'v*'
+
jobs:
CI:
@@ -48,28 +49,10 @@ jobs:
run: |
sudo luarocks install luaunit
sudo luarocks install lua-cjson 2.1.0-1
- - name: "Install OpenResty"
- run: |
- wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
- sudo apt-get -y update --fix-missing
- sudo apt-get -y install software-properties-common
- sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
- sudo apt-get update
- sudo apt-get install openresty-debug
- - name: "Install test::nginx for testing"
- run: |
- sudo apt-get install -y cpanminus
- sudo cpanm --notest Test::Nginx >build.log 2>&1 || (cat build.log && exit 1)
- git clone https://github.com/iresty/test-nginx.git test-nginx
- - name: 'Run Lua Tests'
+ - name: 'Run Tests'
run: |
cd lib/skywalking
lua util_test.lua
- lua span_test.lua
- lua tracing_context_test.lua
- lua segment_ref_test.lua
- cd ..
- - name: 'Run Nginx Lua Tests'
- run: |
- export PATH=/usr/local/openresty-debug/nginx/sbin:/usr/local/openresty-debug/luajit/bin:$/usr/local/openresty-debug/bin:$PATH
- prove -Itest-nginx/lib -r t
+ lua span_test.lua
+ lua tracing_context_test.lua
+ lua segment_ref_test.lua
\ No newline at end of file
diff --git a/lib/skywalking/segment.lua b/lib/skywalking/segment.lua
index ea2f33e..346842d 100644
--- a/lib/skywalking/segment.lua
+++ b/lib/skywalking/segment.lua
@@ -1,19 +1,19 @@
---
+--
-- 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.
---
+--
-- Segment represents a finished tracing context
-- Including all information to send to the SkyWalking OAP server.
@@ -78,4 +78,4 @@ function Segment:transform()
return segmentBuilder
end
-return Segment
+return Segment
\ No newline at end of file
diff --git a/lib/skywalking/segment_ref.lua b/lib/skywalking/segment_ref.lua
index 7709e90..b7c7f67 100644
--- a/lib/skywalking/segment_ref.lua
+++ b/lib/skywalking/segment_ref.lua
@@ -1,19 +1,20 @@
---
+--
-- 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.
---
+--
+
local Util = require('util')
local Base64 = require('dependencies/base64')
@@ -70,13 +71,13 @@ end
-- Deserialize value from the propagated context and initialize the SegmentRef
function SegmentRef:fromSW6Value(value)
- local parts = Util.split(value, '-')
+ local parts = Util: split(value, '-')
if #parts ~= 9 then
return nil
end
- self.trace_id = Util.formatID(Base64.decode(parts[2]))
- self.segment_id = Util.formatID(Base64.decode(parts[3]))
+ self.trace_id = Util:formatID(Base64.decode(parts[2]))
+ self.segment_id = Util:formatID(Base64.decode(parts[3]))
self.span_id = tonumber(parts[4])
self.parent_service_instance_id = tonumber(parts[5])
self.entry_service_instance_id = tonumber(parts[6])
@@ -105,13 +106,13 @@ end
-- Return string to represent this ref.
function SegmentRef:serialize()
local encodedRef = '1'
- encodedRef = encodedRef .. '-' .. Base64.encode(Util.id2String(self.trace_id))
- encodedRef = encodedRef .. '-' .. Base64.encode(Util.id2String(self.segment_id))
+ encodedRef = encodedRef .. '-' .. Base64.encode(Util:id2String(self.trace_id))
+ encodedRef = encodedRef .. '-' .. Base64.encode(Util:id2String(self.segment_id))
encodedRef = encodedRef .. '-' .. self.span_id
encodedRef = encodedRef .. '-' .. self.parent_service_instance_id
encodedRef = encodedRef .. '-' .. self.entry_service_instance_id
- local networkAddress
+ local networkAddress
if self.network_address_id ~= 0 then
networkAddress = self.network_address_id .. ''
else
diff --git a/lib/skywalking/tracing_context.lua b/lib/skywalking/tracing_context.lua
index 427202e..47fcfe6 100644
--- a/lib/skywalking/tracing_context.lua
+++ b/lib/skywalking/tracing_context.lua
@@ -1,19 +1,19 @@
---
+--
-- 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.
---
+--
local Util = require('util')
local Span = require('span')
@@ -58,7 +58,7 @@ function TracingContext:new(serviceId, serviceInstID)
return TracingContext:newNoOP()
end
- o.trace_id = Util.newID()
+ o.trace_id = Util:newID()
o.segment_id = o.trace_id
o.service_id = serviceId
o.service_inst_id = serviceInstID
@@ -99,8 +99,8 @@ end
-- After all active spans finished, this segment will be treated as finished status.
-- Notice, it is different with Java agent, a finished context is still able to recreate new span, and be checked as finished again.
-- This gives the end user more flexibility. Unless it is a real reasonable case, don't call #drainAfterFinished multiple times.
---
--- Return (boolean isSegmentFinished, Segment segment).
+--
+-- Return (boolean isSegmentFinished, Segment segment).
-- Segment has value only when the isSegmentFinished is true
-- if isSegmentFinished == false, SpanList = nil
function TracingContext:drainAfterFinished()
@@ -163,7 +163,7 @@ function Internal:addActive(span)
self.first_span = span
end
- -- span id starts at 0, to fit LUA, we need to plus one.
+ -- span id starts at 0, to fit LUA, we need to plus one.
self.active_spans[span.span_id + 1] = span
self.active_count = self.active_count + 1
return self.owner
@@ -186,4 +186,4 @@ function Internal:nextSpanID()
end
---------------------------------------------
-return TracingContext
+return TracingContext
\ No newline at end of file
diff --git a/lib/skywalking/util.lua b/lib/skywalking/util.lua
index fcfe64d..27c1886 100644
--- a/lib/skywalking/util.lua
+++ b/lib/skywalking/util.lua
@@ -1,95 +1,34 @@
---
+--
-- 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.
---
-local _M = {}
-
--- for pure Lua
-local split = function(str, delimiter)
- local t = {}
- for substr in string.gmatch(str, "[^".. delimiter.. "]*") do
- if substr ~= nil and string.len(substr) > 0 then
- table.insert(t,substr)
- end
- end
- return t
-end
-
-local timestamp = function()
- local _, b = math.modf(os.clock())
- if b==0 then
- b='000'
- else
- b=tostring(b):sub(3,5)
- end
-
- return os.time() * 1000 + b
-end
-
--- for Nginx Lua
-local ok, ngx_re = pcall(require, "ngx.re")
-if ok then
- split = ngx_re.split
- timestamp = function()
- return ngx.now() * 1000
- end
-end
-
-_M.split = split
-_M.timestamp = timestamp
-_M.is_ngx_lua = ok
+--
+local Util = {}
local MAX_ID_PART2 = 1000000000
local MAX_ID_PART3 = 100000
+local SEQ = 1
-local random_seed = function ()
- local seed
- local frandom = io.open("/dev/urandom", "rb")
- if frandom then
- local str = frandom:read(4)
- frandom:close()
- if str then
- local s = 0
- for i = 1, 4 do
- s = 256 * s + str:byte(i)
- end
- seed = s
- end
- end
-
- if not seed then
- if _M.is_ngx_lua then
- seed = ngx.now() * 1000 + ngx.worker.pid()
- else
- seed = os.clock()
- end
- end
-
- return seed
-end
-
-math.randomseed(random_seed())
-
-function _M.newID()
- return {timestamp(), math.random(0, MAX_ID_PART2), math.random(0, MAX_ID_PART3)}
+function Util:newID()
+ SEQ = SEQ + 1
+ return {Util.timestamp(), math.random( 0, MAX_ID_PART2), math.random( 0, MAX_ID_PART3) + SEQ}
end
-- Format a trace/segment id into an array.
-- An official ID should have three parts separated by '.' and each part of it is a number
-function _M.formatID(str)
- local parts = split(str, '.')
+function Util:formatID(str)
+ local parts = Util:split(str, '.')
if #parts ~= 3 then
return nil
end
@@ -102,8 +41,36 @@ function _M.formatID(str)
end
-- @param id is an array with length = 3
-function _M.id2String(id)
+function Util:id2String(id)
return id[1] .. '.' .. id[2] .. '.' .. id[3]
end
-return _M
+-- A simulation implementation of Java's System.currentTimeMillis() by following the SkyWalking protocol.
+-- Return the difference as string, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC.
+-- But in using os.clock(), I am not sure whether it is accurate enough.
+function Util:timestamp()
+ local a,b = math.modf(os.clock())
+ if b==0 then
+ b='000'
+ else
+ b=tostring(b):sub(3,5)
+ end
+
+ return os.time() * 1000 + b
+end
+
+-- Split the given string by the delimiter. The delimiter should be a literal string, such as '.', '-'
+function Util:split(str, delimiter)
+ local t = {}
+
+ for substr in string.gmatch(str, "[^".. delimiter.. "]*") do
+ if substr ~= nil and string.len(substr) > 0 then
+ table.insert(t,substr)
+ end
+ end
+
+ return t
+end
+
+
+return Util
\ No newline at end of file
diff --git a/lib/skywalking/util_test.lua b/lib/skywalking/util_test.lua
index 10d8170..e620017 100644
--- a/lib/skywalking/util_test.lua
+++ b/lib/skywalking/util_test.lua
@@ -1,25 +1,25 @@
---
+--
-- 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.
---
+--
local lu = require('luaunit')
local Util = require('util')
TestUtil = {}
- function TestUtil.testNewID()
+ function TestUtil:testNewID()
local id = Util.newID()
lu.assertNotNil(id[1])
@@ -27,11 +27,11 @@ TestUtil = {}
lu.assertNotNil(id[3])
end
- function TestUtil.testTimestamp()
+ function TestUtil:testTimestamp()
local id = Util.timestamp()
lu.assertNotNil(id)
end
-- end TestUtil
-os.exit( lu.LuaUnit.run() )
+os.exit( lu.LuaUnit.run() )
\ No newline at end of file
diff --git a/t/util.t b/t/util.t
deleted file mode 100644
index e77a7ba..0000000
--- a/t/util.t
+++ /dev/null
@@ -1,96 +0,0 @@
-use Test::Nginx::Socket 'no_plan';
-
-use Cwd qw(cwd);
-my $pwd = cwd();
-
-repeat_each(1);
-no_long_string();
-no_shuffle();
-no_root_location();
-log_level('info');
-
-our $HttpConfig = qq{
- lua_package_path "$pwd/lib/skywalking/?.lua;;";
- error_log logs/error.log debug;
- resolver 114.114.114.114 8.8.8.8 ipv6=off;
- lua_shared_dict tracing_buffer 100m;
-};
-
-run_tests;
-
-__DATA__
-=== TEST 1: timestamp
---- http_config eval: $::HttpConfig
---- config
- location /t {
- content_by_lua_block {
- local util = require('util')
- local timestamp = util.timestamp()
- local regex = [[^\d+$]]
- local m = ngx.re.match(timestamp, regex)
- if m and tonumber(m[0]) == timestamp then
- ngx.say(true)
- else
- ngx.say(false)
- end
- }
- }
---- request
-GET /t
---- response_body
-true
---- no_error_log
-[error]
-
-
-
-=== TEST 2: newID
---- http_config eval: $::HttpConfig
---- config
- location /t {
- content_by_lua_block {
- local util = require('util')
- local new_id = util.newID()
- local regex = [[^\d+$]]
- ngx.say(#new_id)
- for i = 1, #new_id, 1 do
- local m = ngx.re.match(new_id[i], regex)
- if m and tonumber(m[0]) == new_id[i] then
- ngx.say(i)
- end
- end
- }
- }
---- request
-GET /t
---- response_body
-3
-1
-2
-3
---- no_error_log
-[error]
-
-
-
-=== TEST 3: id2String
---- http_config eval: $::HttpConfig
---- config
- location /t {
- content_by_lua_block {
- local util = require('util')
- local id = util.newID()
- local id_str = util.id2String(id)
- local regex = [[^\d+\.\d+\.\d+$]]
- local m = ngx.re.match(id_str, regex)
- if m then
- ngx.say(true)
- end
- }
- }
---- request
-GET /t
---- response_body
-true
---- no_error_log
-[error]