blob: 27c1886114c0db3a3c8da87ffc11a9e5730a5b61 [file] [log] [blame]
--
-- 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 = {}
local MAX_ID_PART2 = 1000000000
local MAX_ID_PART3 = 100000
local SEQ = 1
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 Util:formatID(str)
local parts = Util:split(str, '.')
if #parts ~= 3 then
return nil
end
parts[1] = tonumber(parts[1])
parts[2] = tonumber(parts[2])
parts[3] = tonumber(parts[3])
return parts
end
-- @param id is an array with length = 3
function Util:id2String(id)
return id[1] .. '.' .. id[2] .. '.' .. id[3]
end
-- 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