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:52 UTC

[skywalking-nginx-lua] branch test created (now cd39379)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a change to branch test
in repository https://gitbox.apache.org/repos/asf/skywalking-nginx-lua.git.


      at cd39379  Revert "feature: add CI and test cases for ngx lua. (#3)"

This branch includes the following new commits:

     new cd39379  Revert "feature: add CI and test cases for ngx lua. (#3)"

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-nginx-lua] 01/01: Revert "feature: add CI and test cases for ngx lua. (#3)"

Posted by wu...@apache.org.
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]